Article View: gnu.g++.bug
Article #357Re: size of empty classes
From: mx!cbcscmrs
Date: Fri, 18 Aug 1989 02:03
Date: Fri, 18 Aug 1989 02:03
45 lines
2243 bytes
2243 bytes
In article <8908141613.AA23693@dsys.ncsl.nist.gov> rbj@DSYS.NCSL.NIST.GOV (Root Boy Jim) 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.
>
>? I use g++ 1.35.1- on a Sun3 running OS 3.5.
>
>Just a bit of speculation here. I hope you don't think all that
>whiz-bang object-oriented stuff comes for free. Most likely those two
>bytes are a pointer into some table telling you what class the thing
>really is. Remember that when deriving one class from another, some
>means of dynamically determining to which class an object belongs
>must be provided. The higher level the language, the farther you
>get from what the thing really is. Live with it.
Well, consider it padding... (On a vax, with 1.35.0 anyway...)
I have a simple class like:
class oXdisplay {
Display *dpy;
dpy() { ... }
~dpy() { ... }
};
And it does the Right Thing. It consumes a whole four bytes of memory per
object. The Display* alone takes four bytes...
But I DID find it interesting that an empty class on my machine did take
a byte; just one. A class with just a char in it also took one byte.
And a class with an int in it took 4 bytes.
Note: due to memory alignments, all classes eat four bytes of memory
apiece.
The code, just if you want to see it is around line 729 of stor-layout.c
in 1.35.0 and looks like:
/* C++: do not let empty structures exist. */
if (const_size == 0 && var_size == 0)
const_size = size_unit;
So g++ does not need or use it, the question to the writers (Michael???)
why force it up to one?
Technical Details
Message-ID:
<2271@csun.edu>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!usc!hacgate!ashtate!psivax!csun!mx!cbcscmrsReferences:
<8908141613.AA23693@dsys.ncsl.nist.gov>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!usc!hacgate!ashtate!psivax!csun!mx!cbcscmrs From: mx!cbcscmrs@csun.edu Newsgroups: gnu.g++.bug Subject: Re: size of empty classes Message-ID: <2271@csun.edu> Date: 18 Aug 89 02:03:29 GMT References: <8908141613.AA23693@dsys.ncsl.nist.gov> Sender: news@csun.edu Reply-To: cbcscmrs@ma.csun.edu (Mike Stump) Distribution: gnu Organization: CSU, Northridge School of Engineering & Computer Science Lines: 45