On Fri, 9 Jul 1999, Oleg Krivosheev wrote: > > to not be handled properly. Even though I specify -fpack_struct the > > generated code does not appear to actually do this. Structure fields > > are > > offset and the return from sizeof() returns a value that is not valid. > > what do you mean it is not valid? Read ANSI standard or any > decent C book. It is quite valid - compiler may insert any padding > between struct members...
He probably means it is not exactly what he wants :> > > For instance, if the structure were: > > > > struct foo { > > char text[3]; > > int num; > > }; > > > > sizeof would return 6 and not 5. > > 6? Are you sure you're using Linux/gcc? Yes, 6, it will insert a single extra character at the end of text to place the alignment of num on a 4 byte boundry. > > So it's obvious that the compiler is > > placing a pad byte between text and num to align num. I want it to > > stop! I always hated gcc __attribute__, I prefer the simpler and more common #pragma pack(1) struct {}; #pragma pack() Which forces the layout to be as you specified. Using a command line option is a Bad Idea (tm) as it may corrupt glibc's structures Jason