이 제목을 보자마자
여러분들은 어떤 생각이 드셨나요?
"??int가 4바이트가 아니라고요??
코딩배울 때 int 4바이트라고 배웠고
그거 기본중에 기본아님??"
이런 생각 드신 분 계신가요??
저도 이 말을 듣고 적잖히 당황했습니다.
그동안 알고있던 지식이 흔들리는 기분이었죠.
그럼 우리는 왜 int를 4바이트라고 배웠고
왜 int는 항상 4바이트가 아닐까요??
컴퓨터 붐이 팍 올라왔을 때가 있었습니다.
개인 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비트일 확률이 높습니다.
그렇다면 주소값을 표현할 수 있는 범위가 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를 통해
각 자료형의 크기가 이 운영체체제에서는 어떤지 알 수 있습니다.
처음 프로그래밍을 배울 때
아무생각없이 암기했던 영역이었습니다.
그때 설명을 들었는지 모르겠으나
설명을 들었어도 "저게 뭔소리래?"하면서 넘겼을수도 있고
좌우지간 눈 앞의 시험이 더 급했으니까요.
하지만 이렇게 한번 제대로 이해하고 나니
시야가 조금씩 달라졌습니다.
물론 상황에 따라서 암기가 필요할 때도 있겠지만
한번이라도 제대로 이해하면 좋을거같네요.
메모리와 명령어의 상호작용, 왜 알아야할까?? (1) | 2023.10.10 |
---|---|
2진수계산,왜 알아야하고 어떻게 사용할까?? (1) | 2023.10.08 |
레지스터, 왜 알아야하고 어떻게 동작할까? (0) | 2023.10.05 |
Call by value vs Call by reference??? (C언어 고찰) (0) | 2023.09.23 |
for와 while문, 왜 반복문은 2개가 있을까??(C언어 고찰) (2) | 2023.09.23 |
댓글 영역