|  |
| |
| supershop |
몇가지 이유가 있을 수 있습니다.
1. 512바이트 배열 외에 8바이트만큼 또 다른 지역변수가 존재할 경우
2. 컴파일 과정에서 gcc가 임의로 할당량을 늘리는 경우 (32비트 환경에선 보통 4의 배수만큼의 크기가 아닌 경우 4의 배수 사이즈로 늘려서 맞춰줍니다)
3. 스택 쿠키 등을 저장할 공간을 마련하기 위해
저도 자세히는 몰라 더 이상은 잘 모르겠습니다만 어쨋든 여러가지 이유가 있죠 :) |
2012/02/18 |
|
| 우느님 |
gcc 버전에따라 다르겠지만 2.96이후의 버전에서는 16바이트 단위로 할당되고 8바이트의 dummy값이 추가됩니다.
예를들어(2.96 이후 버전일 경우)
array[13]; 이라는 배열을 선언하게되면
16바이트의 스택이 할당되고 여기에 추가로 8바이트의 더미값이 들어가는 거죠.
esp가 24만큼 줄어들겠군요.
array[10]; 이라는 배열을 선언하게되면
16바이트의 스택이 할당되고 여기에 추가로 8바이트의 더미값이 들어가는거죠
esp가 24만큼 줄어들겠네요.
array[17]; 이라는 배열을 선언하게되면
32바이트의 스택이 할당되고 여기에 추가로 8바이트의 더미값이 들어가는거죠
esp가 40만큼 줄어들겠네요.
( 2.96 이후 버전이라고 해도 또 차이가 있을 수 있습니다. 하지만 질문자님의 gdb버전으로는
16배수 할당(512바이트 = 16 * 32)에 "'8바이트의 더미값'"으로 인해서 esp가 520만큼 줄어든 것 같
네요. ) |
2012/02/18 |
|
| 우느님 |
그리고 더미값은 그냥 쓸데없는 공간입니다. |
2012/02/18 |
|
| supershop |
오호 16바이트 단위였군요~
하나 배워갑니다 ;) |
2012/02/18 |
|
| 우느님 |
저기 밑에서 3번째줄에 잘못썻어요 ㅠ-ㅠㅋ gdb (x) -> gcc (o) |
2012/02/18 |
|
| kindofcrazy |
우느님 supershop님 답변 정말 감사 드립니다. 속이 뻥 뚫리는 느낌 이네요... 거듭 감사 드립니다 (__) |
2012/02/19 |
|