C/C++ 에서 메모리가 어떻게 되고 변수가 메모리에 어떻게 자리잡는지 알아보도록 하자.

int main()
{
     int c = '\xde\xad\xbe\xef';
     int a = '\x78\x56\x34\x12';
     static int b;
     return 0;
}

다음과 같은 소스코드가 있을때, 변수  a 는 stack 에 자리잡게 된다. 4바이트 만큼.

a = '\x78\x56\x34\x12';

을 하게 되면, a 의 메모리는 78 56 34 12 순으로 저장되며 값을 읽어 올때는
12345678 로 읽어진다.

그리고 int a; int b; 로 하게 되면, b 다음에 a 가 바로 오는것이 아니라 dummy 중간에 dummy 값을 가진다.

사용자 삽입 이미지

78 56 34 12 다음에 dummy 값인 cc cc cc 가 들어있고 다음에 de ad be af 값이 들어있는것을 알 수 있다.

만약에 static int a; 하게 되면 a 값은 스택에 잡히지 않게 되고 data 영역에 잡힌다.

지역변수 a 는 0x0012FFxx 영역에 잡히지만,
static a 는 0x004171xx 영역에 잡힌다.

int 4 byte
char 1 byte
short 2 byte
double 8 byte
이다.

+ Recent posts