상세 컨텐츠

본문 제목

(어그로 아님) int자료형은 언제나 4바이트가 아니다

CS지식 학습

by Tabris4547 2023. 9. 24. 09:58

본문

728x90

이 제목을 보자마자

여러분들은 어떤 생각이 드셨나요?

"??int가 4바이트가 아니라고요??

코딩배울 때 int 4바이트라고 배웠고

그거 기본중에 기본아님??"

이런 생각 드신 분 계신가요??

저도 이 말을 듣고 적잖히 당황했습니다.

그동안 알고있던 지식이 흔들리는 기분이었죠.

그럼 우리는 왜 int를 4바이트라고 배웠고

왜 int는 항상 4바이트가 아닐까요??

 

32비트 컴퓨터 체제

컴퓨터 붐이 팍 올라왔을 때가 있었습니다.

개인 PC 개념이 생겨나면서

인터넷 열풍이 있었던 때가 있었죠.

그 시기에 컴퓨터는 32비트였습니다.

잠시 비트에 대해서 설명드리자면

컴퓨터가 계산하는 최소단위라고 보시면 됩니다.

컴퓨터는 0과 1로 계산을 하는데

그 한 단위를 비트라고 하죠.

예를들여 1011 이렇게 되어있으면 4비트.

10111011 이렇게 되어있으면 8비트.

그럼 32비트는 0과 1로 이뤄진 2진수를 32자리까지 처리할 수 있는 거죠.

 

포인터와 연결시켜보자

출처:위키백과

여기서 포인터에 대한 개념을 설명드리면서

왜 32비트에서는 int가 4바이트인지 보겠습니다.

우선 깊게 들어가면 핵심을 잡기 어렵기 때문에

큰 그림을 먼저 잡는 느낌으로 서술하겠습니다.

포인터는 한마디로 "주소값"입니다.

뭐에 대한 주소값이냐면 프로그램에 적혀있는 변수,함수 등에 대한 주소값입니다.

우리가 프로그램을 동작하면 "stack"영역에 

함수나 변수가 저장이 되고 사용할 때 차례대로 호출합니다.

32비트 체제에서는 이 주소값을 표현할 수 있는 범위가 2^32.(2의 32 거듭제곱)

왜냐하면 32비트가 최대이기 때문에 그걸 표현할 수 있는 범위가 제한된 거죠.

이 값들이 정수로 차곡차곡 저장이 되어있습니다.

이 포인터 주소값의 크기는 정수형인 int와 같고

그래서 int는 4바이트다. 라는 말이 생겨났습니다.

 

하지만, 64비트라면 어떨까?

그런데 이제는 컴퓨터가 64비트 시대로 넘어왔습니다.

대부분 여러분이 쓰시는 컴퓨터는 64비트일 확률이 높습니다.

그렇다면 주소값을 표현할 수 있는 범위가 2^64로 엄청나게 늘어났습니다.

아까 32비트에서는 int가 4바이트라고 했죠?

그럼 64비트에서는???

여전히 4바이트??

아니죠. 64비트에서는 표현할 수 있는 범위가 8바이트로 늘었기 때문에

int가 8바이트가 됩니다.

 

운영체제마다 크기가 다르다

이런 부분 때문에 제대로 된 책에서는

"32비트 운영체제 기준입니다"라는 멘트를 넣어둡니다.

그리고 메모리크기는 운영체제마다 다르다라고 말합니다.

이 말을 좀 더 풀어보면

"32비트 체제에서는 32비트에 맞는 OS를 사용했고

int를 4바이트로 관리해서 사용했다.

하지만 OS가 다른 비트체계(1비트,2비트,4비트,8비트,16비트 등등)라면

int의 크기는 OS체제에 따라 언제든지 바뀔 수 있다"

그래서 C에서는 sizeof를 통해

각 자료형의 크기가 이 운영체체제에서는 어떤지 알 수 있습니다.

 

무지성 암기보다는 이해

 

처음 프로그래밍을 배울 때 

아무생각없이 암기했던 영역이었습니다.

그때 설명을 들었는지 모르겠으나

설명을 들었어도 "저게 뭔소리래?"하면서 넘겼을수도 있고

좌우지간 눈 앞의 시험이 더 급했으니까요.

하지만 이렇게 한번 제대로 이해하고 나니

시야가 조금씩 달라졌습니다.

물론 상황에 따라서 암기가 필요할 때도 있겠지만

한번이라도 제대로 이해하면 좋을거같네요.

728x90

관련글 더보기

댓글 영역