변수가 스택에 쌓이는걸 보다가 궁금한 게 생겼습니다.
글쓴이: nexusz99 / 작성시간: 수, 2009/03/18 - 11:37오후
#include <stdio.h> int main() { char a = 's'; char c = 'a'; char b[10]="asdfasdfa"; char *p = (char *)&a+3; int i = 0; printf("a = %d \t c = %d \t b = %d\n",&a,&c,b); for(i=0;i<20;i++) { printf("%d = %c\n",p,*p); p--; } return 0; }
실행결과
a = 1244996 c = 1244992 b = 1244980
1244999 = ?
1244998 = ?
1244997 = ?
1244996 = s
1244995 = ?
1244994 = ?
1244993 = ?
1244992 = a
1244991 = ?
1244990 = ?
1244989 =
1244988 = a
1244987 = f
1244986 = d
1244985 = s
1244984 = a
1244983 = f
1244982 = d
1244981 = s
1244980 = a
---------------------------------------------------
a 와 c 사이는 연속적으로 빈공간 없이 변수가 스택에 올라가는데
배열 b와 c 사이에는 2바이트만큼의 빈 공간이 할당되는데 정상적인건가요?
정상적인 것이라면 왜 그런건가요?
컴파일은
OS = Windows Vista
Compiler : Microsoft Visual c++ 6.0
으로 하였습니다.
Forums:
aligning 때문인 것
aligning 때문인 것 같네요.
b[0]이 word size (=4)에 맞추어
align된 위치에 오도록 배치하는 것 같습니다만 ..
댓글 달기