[Bug c/13078] New: sizeof returns incorrect 4 byte aligned value when structure contains integers and smaller types
michaelcollins at ivorycity dot com
gcc-bugzilla@gcc.gnu.org
Sun Nov 16 20:01:00 GMT 2003
Interesting and annoying bug...
gcc version 3.2.3 Gentoo Linux
The sizeof() operator returns the incorrect size of structures when they
contain a mixture of integers and shorts or char types.
sizeof() returns a 4 byte aligned size for the structure when the structure
contains at least one integer and an odd number of shorts or chars
ex1:
struct a
{
int i;
short j;
};
sizeof(struct a) is 8, it should be 6
And it returns a 2 byte aligned size when a structure contains at least one
short and and odd number of chars.
Ex2:
struct b
{
short i;
char j;
};
sizeof( struct b ) is 4, it should be 3
I understand why you might want 4 byte aligned values, but this has caused me
mega bug headaches when writing binary files, since I end up more bytes than I
intended and my opcode offsets get all fouled up.
Here is some more code:
struct
try1
{
unsigned short a;
};
struct
try2
{
unsigned int a;
unsigned short b;
};
struct
try3
{
unsigned int a;
unsigned short b;
unsigned short c;
};
struct
try4
{
unsigned int a;
unsigned short b;
unsigned short c;
unsigned short d;
};
struct
try5
{
unsigned int a;
unsigned short b;
unsigned short c;
unsigned char d;
};
int
main()
{
printf("Size %d my machine prints 2 should be 2\n", sizeof(struct try1) );
printf("Size %d my machine prints 8 should be 6\n", sizeof(struct try2) );
printf("Size %d my machine prints 8 should be 8\n", sizeof(struct try3) );
printf("Size %d my machine prints 12 should be 10\n", sizeof(struct try4) );
printf("Size %d my machine prints 12 should be 9\n", sizeof(struct try5) );
}
--
Summary: sizeof returns incorrect 4 byte aligned value when
structure contains integers and smaller types
Product: gcc
Version: 3.2.3
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: michaelcollins at ivorycity dot com
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: gcc (GCC) 3.2.3 20030422
GCC host triplet: (Gentoo Linux 1.4 3.2.3-r2, propolice)
GCC target triplet: x86
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13078
More information about the Gcc-bugs
mailing list