본문 바로가기

Let's Study/Pointer

2. 포인터가 4바이트인 이유

'포인터는 주소를 가리키기만 하면 되기 때문에 4바이트 이상 필요하지 않아요.'

사람들에게 물어보니 이런 답을 많이 들었습니다.

 

왜 하필 4바이트일까요.

 

 

전 이렇게 생각합니다.

 

32비트 CPU주소값은 4바이트로 표현됩니다. (8비트당 1바이트이기 때문에 )

예를들어 10진수는 7141840, 11008720, 17038120, 16645524

 16진수는 0x103dc90, 0x8047c24, 0x104fa78

이런식이죠..

 

 

 

 

 

만약, 64비트 CPU의 PC(Program counter)가 32비트를 쓰고 있다면

 

포인터의 크기는 4바이트가 될 것이고, 64비트를 쓰고 있다면 포인터의 크기는 8바이트가 됩니다.

 

(여기서 말하는 PC란 CPU 내부에 있는 레지스터 중의 하나를 말합니다. PC는 다음에 실행될 명령어의 주소를 가지고 있습니다.)

 

즉, PC가 몇 비트를 쓰는가에 따라 포인터의 크기가 결정된다고 생각합니다.

 

저도 정확하게는 모르겠네요 ㅠ.

 

 

 

누군가 그랬죠. 64비트 cpu에서는 포인터가 8바이트다.

 

지금 제가 쓰고있는 컴퓨터 환경이 윈도우 8, 64비트입니다.

 

sizeof를 이용해서 포인터 크기를 보니 4바이트군요.

 

 

결국 포인터의 크기는 사용하는 컴퓨터의 환경에 따라 값이 달라진다고 할 수 있겠네요.

 

더 자세하게 파고들어가려면 운영체제쪽으로 넘어가야 될 것 같습니다.

'Let's Study > Pointer' 카테고리의 다른 글

5. *p와 p[]의 차이.  (2) 2013.05.07
4. sha == sha[0] == &sha[0][0]  (0) 2013.03.23
3. 배열포인터, 이젠 아무대나 *쓰지말자!  (0) 2013.03.22
1. *의 두가지 의미  (0) 2013.03.21