답변 감사합니다.
그렇다면 한 가지 궁금한게 더 있는데 일반 멤버 함수와 static 멤버 함수의 메모리 할당에 대한 차이는 무엇인가요?
Lyn 님이 쓰신 글 :
: 매소드는 는 구조체의 크기에 포함되지 않습니다. 오로지 변수만 크기에 포함됩니다
: 간단하게 얘기해서 같은 구조체를 1억번 생성 해도 함수는 딱 하나만 존재한다는겁니다. 함수가 크기에 포함된다면 그 메모리 소모는 엄청난 낭비겠죠 ㅡ.ㅡ;;
:
: 컴파일러 마다 조금씩 다르지만 예를들어 Test2의 void Init() 함수는 파라메터가 없는 것으로 보이지만 실제 컴파일 시에는 void Init(Test2* this) 로 변화됩니다. <그래서 this 포인터란게 존재 하죠 : )>
:
: 뭐 가상함수의 경우에는 추가적인 처리가 필요 하지만요 : )
:
: 안명호.ASURADA 님이 쓰신 글 :
: : 구조체의 메모리 할당되는 방법이 궁금합니다.
: :
: : 변수만 갖는 구조체와 같은 변수에 멤버 함수를 갖는 구조체의 sizeof 크기가 어째서 동일 한 거죠?
: :
: : 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);
: : int nSizeFunc2 = (int)sizeof(TEST2);
: :
: : TEST *s1_1 = new TEST;
: : TEST *s1_2 = new TEST;
: :
: : TEST2 *s2_1 = new TEST2;
: : TEST2 *s2_2 = new TEST2;
: :
: :
: : nSizeFunc1 과 nSizeFunc2 가 모두 24로 나오네요.
: :
: : 테스트는 Visual C++ 2005 에서 하였습니다. 빌더는 다를까요? (다르지 않을 거라 생각이 드는데...)
|