프로그래밍

 3198, 1/160 회원가입  로그인  
   gozjtmznf1234
   c언어 주소 질문

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6371 [복사]


c언어를 공부하다 이해가 안 되서 올립니다.

int형 변수의 크기가 4바이트라고 알고있거든요,

그런데 dev c++에서 아래 소스를 컴파일하니까,

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

#include <stdio.h>
#include <conio.h>
main()
{
     int a=1;
     int b=2;
     int c=3;
     printf("a의 값:%d\n",a);
     printf("a의 크기:%d\n",sizeof(a));
     printf("a의 주소:%d\n",&a);
     printf("b의 값:%d\n",b);
     printf("b의 크기:%d\n",sizeof(b));
     printf("b의 주소:%d\n",&b);
     printf("c의 값:%d\n",c);
     printf("c의 크기:%d\n",sizeof(c));
     printf("c의 주소:%d\n",&c);
     getch();
}

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

========================================

a의 값:1

a의 크기:4

a의 주소:2293572

b의 값:2

b의 크기:4

b의 주소:2293568

c의 값:3

c의 크기:4

c의 주소:2293564

========================================

이런식으로 주소의 차이가 4씩 났습니다.

그런데 visual c++ 2010에서 위 소스를 컴파일하니까

========================================

a의 값:1

a의 크기:4

a의 주소:2226532

b의 값:2

b의 크기:4

b의 주소:2226520

c의 값:3

c의 크기:4

c의 주소:2226508

========================================

이런식으로 주소의 차이가 12씩 나네요.

왜 이런 건가요?

이해가 안되네요ㅠ


  Hit : 4320     Date : 2013/07/30 09:34



    
kumi123 현대의 컴파일러에는 더미노드라는 것을 사용합니다.

즉, 변수와 변수 사이에, 임의로 쓰레기 값을 넣어 맞춘 것이지요..

참고로 더미는 16바이트 배수 기준으로 더미를 쌓으니

4+12=16인 것입니다.

더미노드도, 일종의 SPO같은 기법의 방어기법중 하나입니다.
2013/08/01