Re: In-memory order of class variables
irotas ha scritto:
Consider the following class:
class Foo
{
bool a;
int b;
char c;
};
Is it always, no matter what, infallibly true, that Foo::a will appear
in memory *before* Foo::b, and Foo::b before Foo::c? (I'm talking
about userland here, not kernel)
I always assumed that to be true, but someone told me recently that
they thought that some architectures might reorder the variables in
memory (if the compiler is configured to pack struct's) in order to
obtain an optimal memory footprint.
This "someone" is wrong. 9.2/12 says that explicitly:
"Nonstatic data members of a (non-union) class declared without an
intervening access-specifier are allocated so that later members have
higher addresses within a class object. The order of allocation of
nonstatic data members separated by an access-specifier is unspecified
(11.1)."
So the only reordering allowed is due to the presence of
access-specifiers. For example an implementation may decide store all
private members before all public members, regardless of the declaration
order. For what it's worth, I'm not aware of any implementation that
exploits this possibility.
HTH,
Ganesh
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]