typedef int element;
typedef struct ListNode {
	element data;
	struct ListNode* link; // 
}ListNode;

저 구조체의 크기는 어떻게 될까

element가 int니까 4byte겠고

link는? 포인터이니까 8byte라고 치면 4+8 12byte가 될 텐데

16이란다 

 

8 + 8 이라서 16인가? 

 

왜지

 

link가 포인터이니까 8바이트인건 알겠는데

int는 4바이트 잖어

 

나머지 4바이트는 어디서 나온거야..

 

궁금해서 메모리를 직접 확인해보기로 했다.

 

ListNode* p = (ListNode*)malloc(sizeof(ListNode));

단순 연결 리스트 공부하던 코드에서 가져왔다

 

p에는 ListNode만큼의 공간이 할당될 것이니

 

p의 주소가 메모리의 어디에 할당되었는지 볼 수 있으면 구조를 파악할 수 있을 것이다.

 

디버깅을 시작하고

감시할 항목에 p를 추가한다.

 

주소를 복사해서 

 

붙여넣기

 

저 공간이 ListNode 구조체의 크기와 같다.

 

cd는 새로 생성된 버퍼에 저장되는 기본값이다. 

 

cd가 총 16개이니 16바이트가 생성된거 맞다.

 

그럼 이제 이 구조체 멤버에 값을 대입해서 

 

값이 들어가면 어떻게 변하는지 알아보겠다

 

 

먼저 정수를 대입

 

int만큼의 공간에 0이 할당되었다. 

그럼 나머지 12바이트의 공간이 남았는데..

 

 

 

다음으로 8바이트 주소값을 넣어주겠다 (head포인터에는 NULL이 들어있다)

신기하게도 8바이트 만큼의 공간에 NULL이 채워지긴 했는데

 

중간이 텅 비었다...

 

텅 비긴 했지만 공간이 할당되긴 했으니까 16바이트가 맞다는 결론이 나온다

---------------------------------------

 

왜 이렇게 되는지 나는 잘 모르겠다.

 

 

+ Recent posts