|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1778 [복사]
'이 때, int 데이터형은 4바이트이기 때문에, 스택 데이터의 기본 크기인 4바이트와 동일합니다. 그렇다면 만약 1바이트인 char 데이터형이나 2바이트인 short 데이터형이 지역변수로 선언될 경우엔 스택에 어떻게 저장이 될까요? 이럴 경우엔 4바이트에서 부족한 바이트만큼의 데이터가 임의로 추가됩니다. 즉, 1바이트인 char 데이터형일 경우엔 부족한 3바이트가, 그리고 2바이트인 short 데이터형일 경우엔 부족한 2바이트가 추가됩니다.'
여기까지가 해커스쿨 왕초보 bof문서에 나온 내용이고
와우해커의 달고나가 작성하신 문서에도 '스택 데이터의 기본 크기는 4바이트이기 때문에 4의 배수로 할당된다, 하지만 gcc의 버전에 따라 다르기도 하다'는 뜻으로 나와 있는데요,
dummy에 관한 궁금증이 생겨 직접 아래 소스코드를 컴파일해 실행시키자
-------------------------dummy.c-----------------------------
#include <stdio.h>
int main()
{
char a;
char b;
printf("%p\n",&a);
printf("%p\n",&b);
return 0;
}
-----------------------------------------------------------------
0xbffff827
0xbffff826
-----------------------------------------------------------------
a와 b의 주소가 1밖에 차이가 나지 않습니다.
1.저는 위의 두 문서를 읽고 dummy라는 것은 꼭 붙어야 하는 것이라고 생각하였는데, 직접 실험해본 결과 dummy가 붙지 않았습니다. 그렇다면 4바이트보다 작은 데이터형으로 지역변수를 만들었을때 컴파일러에 따라 dummy가 붙는 이유는 무엇인가요?
2.데이터, bss, 힙 세그먼트에서도 dummy가 붙나요?
|
Hit : 3880 Date : 2015/02/26 01:08
|