[C/C++] 운영체제에 따른 포인터 크기의 변화?
우리는 인텔의 x86-IA32를 줄여서 32bit 운영체제라고 부르고, x86-64(또는 x64)를 줄여서 64bit 운영체제라고 부른다.
이전에 AMD에서 32bit가 호환가능한 64bit OS를 선보이고,
인텔도 x64 이후 x86-64를 출시하면서 이제는 어떤 것이든 호환가능한게 당연한 상식이 되었다고 알고 있다.
따라서 호환가능함을 당연한 전제를 깔고 시작한다.
32bit 로 표현 가능한 메모리의 크기는 대략적으로 4GB(2^32)가 된다.
포인터는 변수의 메모리 주소를 가르키기 때문에, 우리가 사용하려는 주소값을 모두 가르킬 수 있는 크기가 필요하다.
따라서 위의 32bit 의 경우에는 어떤 변수 타입의 포인터라도 4byte 크기면 충분하다.
64bit 의 경우에 포인터의 크기가 8byte 인 것도 위와 같은 논리를 따른다.
그런데, Visual Studio를 비롯한 컴파일러에서 x86, x64를 선택하여 컴파일하는 기능이 있다.
이를 이용하면, 사용가능한 메모리의 크기가 정해지므로 이에 따라서 포인터의 크기가 정해지게 되는 것이다.
결론적으로 운영체제의 표현 비트에 따라서 포인터의 크기가 변하는 것이 아니라,
컴파일 설정에 따라서 변하게 된다.
[참고]
https://stackoverflow.com/questions/16823752/why-size-of-void-pointer-is-4-on-windows-64-bit-platform
댓글
댓글 쓰기