Path: utzoo!utgpu!watmath!uunet!lll-winken!pacbell!osc!strick From: strick@osc.COM (henry strickland) Newsgroups: gnu.g++.bug Subject: Re: size of empty classes Message-ID: <485@osc.COM> Date: 16 Aug 89 01:21:43 GMT References: <8908141630.AA14115@yahi.Stanford.EDU> Reply-To: strick@osc.UUCP (henry strickland) Distribution: gnu Organization: the techwood toaster pastry users group, georgia tech Lines: 43 Company: Object Sciences Corp In article <8908141630.AA14115@yahi.Stanford.EDU> tiemann@lurch.stanford.edu writes: > > From: chatty%FRLRI61.BITNET@cunyvm.cuny.edu > > I just discovered that an empty class has a non-null size. Is that > > intentional? If it is, what are those 2 bytes for? Until now, I > > thought having an empty base class was for free. I am disappointed. >There is one byte reserved by this action on sparc and VAX, and two >bytes on m68k and i386. Why not let empty structures exist? Well, >for one thing, different implementations of malloc do different things >when called with zero for an argument. Some systems will allocate a >chunk which gives the user zero size (but a four-byte overhead for >malloc). Other systems will just return zero. > >Michael I hadn't thought of the malloc problem. The reason I would consider more fundamental is to preserve object identity: two different objects, whether empty of data or not, should be distinguishable from one another. In C++ you determine object identity by its address. Allocating at least a byte for each object seems the only way to do this. cfront-1.2 squeezes out (does not allocate) the extra bytes for empty base classes if the derived class has any variables. I'm not sure why this cannot be done with multiple inheritance, but GNU1.35 and AT&T2.0 both seem to keep the extra bytes. I'd be curious to find out why. // on a sun3: struct B { }; struct D : B { int i; }; main() {printf("%d %d\n", sizeof (B), sizeof (D) ); } when executed: cfront1.2 prints: 2 4 cfront2.0 prints: 2 6 g++-1.35.1- prints: 2 6 strick -- strick@osc.com 415-325-2300 uunet!lll-winken!pacbell!osc!strick ( also strick@gatech.edu )