(C++) 포인터는 4바이트이다.

32비트 운영체제의 포인터는 4바이트이다.

왜?  잠깐만........................

포인터의 크기는?..포인터의 데이터타입의 뜻하는 것은?????????????이라는 질문입니다.
일반적으로 32비트 컴퓨터에서 포인터의 크기(size)는 4바이트의 공간을 차지하게 됩니다.
왜냐하면......포인터란 놈은 메모리의 주소를 기억하는 공간이기 때문에...
라고...........하죠..

이까지의 내용은 대부분의 책에서 설명하고 있죠..
어쩌면 당연한 것이라 아무도 설명해주지 않는 부분에 대해서 언급을 시작하겠습니다.
왜냐하면.......저는 이 당연한 것을 이해하는데 꽤나 오랜시간이 걸렸기 때문이죠-_-;

자...
포인터는 4바이트의 공간을 차지합니다. 주소를 저장하기 위해서...
컴퓨터의 메모리는 1차원 배열이라고 생각하세요.
그리고 그 배열의 크기가..32비트로 표현할 수 있는 전체범위입니다.
그러니까....메모리의 주소를 기억하기 위해서는 32비트의 공간이 필요하겠죠?..
ㅇㅋ?....
(참..저두 글재주가 너무나도 없습니다;; 제가 읽어도 이해가 안됩니다.ㅡㅜ)

그럼.........
int a;
int *p;
를 했을 때......a랑 p는 같은 크기의 공간을 차지하겠죠?
자...이까진 쉽습니다.
그럼...........
char a;
char *p;
를 했을 때는?..........위에서 언급했듯이..포인터의 크기는 4바이트이기 때문에
a는 1바이트.
p는 4바이트의 크기를 가집니다..........

이쯤에서 질문이 나옵니다.. char형인데..왜 4바이트죠? ( --)/ 버럭버럭
그럼...교수님들이 대답합니다........포인터니까!.

아......헤깔리기 시작합니다(--);;;;;;;;;;;;;;

그럼..오늘 제가 쓰고자 하는 부분의 핵심포인트!
포인터의 데이터 타입이 뭘 하는 놈일까?..
포인터는 주소를 저장하는 놈이라고 수천번 언급했습니다.ㅋㅋㅋ
자..............
char a;
char *p;
p = &a;
라고 했을 때..
p에는 어떤 값이 저장될까요?...........
당연히 a가 저장되어 있는 메모리의 주소가 저장됩니다..
물론 그 주소는 랜덤(?)하게 배정이 될꺼구요.............
그 주소는 4바이트겠죠?..왜냐면 메모리의 한 부분일꺼니까..그쪽 부분을 가르키는겁니다.
사용자 삽입 이미지

에고..설명이 힘들어서 직접 캡쳐해서 설명하는 센스~;;
위에 그림 보면서 아래 설명을 보세요.

그럼..
printf("%c",*p);
를 하게 되면..........컴퓨터는.
p라는 변수에 저장되어 있는 값에 해당하는 메모리를 찾아갑니다.
그리고........그 메모리에서 값을 읽어오겠죠?..
그런데 문제점 하나.
얼마나 읽어와야할까요?.....포인터는 단지 주소만 기억하고 있는데.
이 주소에 저장되어 있는 값이 char형이라서 1바이트만 읽으면 되는건지
int형이라서 4바이트를 읽어야될지......알수가없죠..
그래서 포인터들도 크기는 항상 4바이트지만..자신의 타입을 가지고 있는겁니다.
char로 선언되어 있다면...........자신이 가르키고 있는 주소에서 1바이트만 읽어오고.
int로 선언되어 있다면..자신이 가르키고 있는 주소에서 4바이트를 읽어오고..

만약...위의 코드에서
p가 char *p가 아닌.........
int *p로 선언되어 있다면 어떻게 될까요?

그럼..
printf("%d",*p);
를 하게되면..
위에서 보면 0xCCCCCC41 의 값이 읽어져오겠죠?...

결론을 말하자면.........
포인터의 타입은.........
값을 읽을 때........어떠한 관점으로 바라볼지를 결정하는 것입니다.
어떠한 관점에서 메모리를 쳐다볼것인가?..
그것을 결정하는거죠................


글을 다 쓰고보니.........엉망이네요..
깔끔하게 전달하고 싶었는데..

포인터라는 놈이..이해하고 나면..참 재미있는 녀석인데..
설명하기도 힘들고..이해하기도 힘든 녀석인거 같네요..........

주절주절 글을 썼는데............이해가 안가시더라도
돌 던지지 마세요.ㅡㅜ
ㅋㅋㅋㅋㅋ


출처

댓글

이 블로그의 인기 게시물

(ElasticSearch) 결과에서 순서 정렬

(네트워크)폴링방식 vs 롱 폴링방식

(18장) WebSocekt과 STOMP를 사용하여 메시징하기