This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/32016] New: sizeof(class) always a multiple of 4 on 32 bit machine
- From: "bliss1940-bbs at yahoo dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 21 May 2007 01:11:58 -0000
- Subject: [Bug c++/32016] New: sizeof(class) always a multiple of 4 on 32 bit machine
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
GCC seems to have a "feature" where it always pads the end of classes (or
structs) to make the class size as reported by sizeof() be a multiple of 4
bytes when targeting a 32 bit machine.
This isn't a data alignment issue as the problematic classes contain nothing
but chars. It seems to be simply arbitrary with no practical use except to
provide pitfalls for programmers.
It makes the code non-portable if sizeof() is used and thus makes it cumbersome
to define and manipulate inter-computer messages. I've always believed I could
define a class or struct that would have the size I wanted with no holes if I
took data alignment into consideration. That seems to be the case with other
compilers, and is the case with GCC when targeting an 8 bit machine, but alas,
it doesn't work on the ARM7.
I can work around this by making my messages have a size that is a multiple of
4, but it doesn't seem this should be necessary. Hopefully I'll never have to
use a 64 bit machine.
Just to make myself clear, this isn't a data alignment thing. There are no
holes between data members. All data members are chars. The hole is at the
end, and the only reason for the hole that I can figure is to make sizeof()
less useful.
--
Summary: sizeof(class) always a multiple of 4 on 32 bit machine
Product: gcc
Version: 4.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: bliss1940-bbs at yahoo dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32016