변수가 스택에 쌓이는걸 보다가 궁금한 게 생겼습니다.

nexusz99의 이미지

#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

으로 하였습니다.

vacancy의 이미지


aligning 때문인 것 같네요.

b[0]이 word size (=4)에 맞추어
align된 위치에 오도록 배치하는 것 같습니다만 ..