왜 빈 껍데기 클래스 (empty class)의 크기는 하필 1byte일까?
"static member만을 가진 class의 크기는?" 포 스트에서 여러 형태의 class의 크기에 대해서 알아보았다.
특히 아래와 같은 빈 껍데기 클래스 (empty class)의 크기는 1byte였고,
빈 껍데기 클래스를 상속 받은 클래스도 base class optimization을 수행하는 대부분의 compiler에서는 1byte가 되고,
child class가 int와 같은 멤버 변수를 가질 때는 1byte라는 크기는 종족을 감추었다.
(즉, base class가 1byte이고 child class가 int 멤버 변수를 가지면 child class의 크기는 5byte (1+4)가 아니고 4byte가 되는 것이다.)
아무튼 아래와 같은 class는 왜 크기가 1byte일까?
class AEmptyClass
{
};
sizeof(AEmptyClass) ==> 1byte
이유는,
메모리 상에서 Instance들이 있는 array에서 빈 껍데기 클래스의 Instance를 다른 Instance와 구분하기 위해 최소한의 크기인 1byte라도 할당하기 위한 것이다.
즉, Class의 instance는 스택 (stack)이든 힙 (heap)이든 어딘가에 자리를 잡게 될 것이고,
Class instance는 다른 instance와 구분되기 위해 주소를 가지게 될 것이다. 그래서 Class가 empty class라고 0byte의 크기를 준다면 주소로 구분할 수 없기 때문에 구분을 짓기 위해 1byte의 최소 크기를 준 것이다.
[References]
C++의 창시자인Bjarne Stroustrup의 Bjarne Stroustrup's C++ Style and Technique FAQ에서 왜 빈 껍데기 클래스가 1byte인지에 대한 질문에 대한 답변이 있다.
Why is the size of an empty class not zero?
그리고 아래와 같이 관련 News group의 질의 응답들도 있다.
C++ - Size of an empty class why 1 byte ?
C++ - Re: Why empty class size is 1 Byte ???
"static member만을 가진 class의 크기는?" 포 스트에서 여러 형태의 class의 크기에 대해서 알아보았다.
특히 아래와 같은 빈 껍데기 클래스 (empty class)의 크기는 1byte였고,
빈 껍데기 클래스를 상속 받은 클래스도 base class optimization을 수행하는 대부분의 compiler에서는 1byte가 되고,
child class가 int와 같은 멤버 변수를 가질 때는 1byte라는 크기는 종족을 감추었다.
(즉, base class가 1byte이고 child class가 int 멤버 변수를 가지면 child class의 크기는 5byte (1+4)가 아니고 4byte가 되는 것이다.)
아무튼 아래와 같은 class는 왜 크기가 1byte일까?
class AEmptyClass
{
};
sizeof(AEmptyClass) ==> 1byte
이유는,
메모리 상에서 Instance들이 있는 array에서 빈 껍데기 클래스의 Instance를 다른 Instance와 구분하기 위해 최소한의 크기인 1byte라도 할당하기 위한 것이다.
즉, Class의 instance는 스택 (stack)이든 힙 (heap)이든 어딘가에 자리를 잡게 될 것이고,
Class instance는 다른 instance와 구분되기 위해 주소를 가지게 될 것이다. 그래서 Class가 empty class라고 0byte의 크기를 준다면 주소로 구분할 수 없기 때문에 구분을 짓기 위해 1byte의 최소 크기를 준 것이다.
[References]
C++의 창시자인Bjarne Stroustrup의 Bjarne Stroustrup's C++ Style and Technique FAQ에서 왜 빈 껍데기 클래스가 1byte인지에 대한 질문에 대한 답변이 있다.
Why is the size of an empty class not zero?
그리고 아래와 같이 관련 News group의 질의 응답들도 있다.
C++ - Size of an empty class why 1 byte ?
C++ - Re: Why empty class size is 1 Byte ???
Save This Page
Trackback Address :: http://alones.kr/blog/trackback/750
-
Subject: 얼마나 신경을 써야 하는가
Tracked from 텅 빈 공간을 정신없이 탐험하는 인생 2007/08/27 12:34 삭제왜 빈 껍데기 클래스 (empty class)의 크기는 하필 1byte일까? 즐겨 찾는 프로그래밍 관련 블로그 중 하나인 Alones World에 Alones 님께서 제 궁금증에 위와 같이 답해주셨습니다. 저것은 쓸 데 없을 것 같은 empty class도 사용자가 만들 것을 가정했기에 나온 방책이겠지요. 제가 지금 어떤 어플리케이션의 요구사항 및 테스트 케이스들을 도출하고 작성하고 있는데, 저와 제 상사의 의견이 불일치하여 그냥 상사의 의견대로 따..

댓글을 달아 주세요
그런 이유가 있었군요. 추상 클래스가 아닌 빈껍데기 클래스를 만들어 본적이 없어서 관심가지지 않았었는데, 그런 사람이 있을까봐 이렇게 했나보군요. 역시 언어를 개발한다는 것은 골치아픈 일인 것 같습니다.
그리고 많은 호기심을 갖고 탐구하시고, 이런 귀찮은 수고도 마다하지 않으시는 alones님도 존경스럽습니다. 흥미로운 기사들을 많이 쓰셨는데, 아직도 다 못보고 있답니다.
또, 볼 것 없는 제 블로그까지 구독하신다니, 괜히 자원만 낭비하시는 것은 아닌지 모르겠네요. 지금까지 블로깅을 매우 소홀히 했는데, 구독자가 생기니 책임감까지 드네요. 저도 열심히 하겠습니다~ ^^
^^ 좋은 내용 많이 기대하겠습니다~~