2009/07/21

구조체 크기로 삽질하다

무심코 사용하는 구조체에 포함 된 함수로 메모리를 객체 수 만큼 차지 하는게 아닐까 하는 의심이 들어 테스트 해 보았다.

같은 멤버 변수를 갖는 구조체 두개를 선언하고 둘 중 하나에는 함수를 몇 개 추가하고 객체를 만들었을때 생성되는 메모리 위치를 비교해 보았다. 의심과는 다르게 메모리에 생성되는 구조체 객체는 함수에 대한 메모리 차지는 없었다.

virtual 함수의 경우 조금 다르다 하는데 그 부분은 좀 더 공부를 해 봐야겠다. (역시 기본이 중요한 것 같다.)


    struct TEST
{
int a;
int b;
int c;
int d;
int e;
int f;
};

struct TEST2
{
int a;
int b;
int c;
int d;
int e;
int f;

TEST2()
{
a = 0;
b = 1;
c = 2;
d = 3;
e = 4;
f = 5;
}

void Init()
{
a = b = c = d = e = f = 0;
}

int GetA() { return a; };
int GetB() { return b; };
int GetC() { return c; };
int GetD() { return d; };
int GetE() { return e; };
int GetF() { return f; };
};

int nSizeFunc1 = (int)sizeof(TEST); // 24
int nSizeFunc2 = (int)sizeof(TEST2); // 24

TEST *s1_1 = new TEST;
TEST *s1_2 = new TEST;

TEST2 *s2_1 = new TEST2;
TEST2 *s2_2 = new TEST2;

TEST tt1[5];
for ( int i = 0; i < 5; ++i )
{
TRACE( "%d => %p\n", i, tt1 + i );
}

// Output
0 => 0018F5E0
1 => 0018F5F8
2 => 0018F610
3 => 0018F628
4 => 0018F640

TEST2 tt2[5];
for ( int i = 0; i < 5; ++i )
{
TRACE( "%d => %p\n", i, tt2 + i );
}

// Output
0 => 0018F554
1 => 0018F56C
2 => 0018F584
3 => 0018F59C
4 => 0018F5B4


이 문제에 대한 Borland Forum 의 Lyn님의 답변
Original Post :
http://neodreamer-dev.tistory.com/309

No comments :

Post a Comment