질문이 좀 난해 한가요?
멤버 함수가 객체의 생성과 무관하게 한번만 생성 된다면 일반 멤버 함수와 static 멤버 함수와의 차이점은 무엇인가요?
Lyn 님이 쓰신 글 :
: 멤버 함수랑 메모리 할당이랑 무슨 관계가있는지 ㅡ.ㅡ;;;
:
: 안명호.ASURADA 님이 쓰신 글 :
: : 답변 감사합니다.
: :
: : 그렇다면 한 가지 궁금한게 더 있는데 일반 멤버 함수와 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 에서 하였습니다. 빌더는 다를까요? (다르지 않을 거라 생각이 드는데...)
|