Xref: news2.mv.net comp.os.msdos.djgpp:2698 Newsgroups: comp.os.msdos.djgpp From: sam AT cs DOT vu DOT nl (Megens SA) Subject: problem with packed structs Nntp-Posting-Host: flits.cs.vu.nl Sender: news AT cs DOT vu DOT nl Organization: Fac. Wiskunde & Informatica, VU, Amsterdam Date: Sun, 14 Apr 1996 17:08:38 GMT Message-ID: Lines: 55 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Hi! I ran into the problem of aligned fields within a struct. I need to pack a struct so it will have exactly the memory-layout I expect it to be (as mentioned in the FAQ, section 22.9). I tried the example that was given in the info-package about __attribute__((packed)), but although that should work, it doesn't... A small program I wrote to test it: struct foo { char a; int x[2] __attribute__((packed)); }; int main() { foo* f = new foo; printf("size of struct = %d\n", sizeof(foo)); printf("f = %p, a = %p, x = %p\n", f, &(f -> a), &(f -> x)); return 0; } This produces something like: size of struct = 12 f = 4c0a0, a = 4c0a0, x = 4c0a4 But what I wanted to see was: size of struct = 9 f = 4c0a0, a = 4c0a0, x = 4c0a1 To fix this, I could compile with -fpack-struct, but the docs say I shouldn't do that if I am using library-defined struct, which is of course the case. :) Another solution is to change the layout of the struct (as mentioned in the docs), but that also is not an option. I'm using DJGPP v2, gcc version 2.7.2 (everything else seems to work fine). I read the FAQ, I read the gnu-info docs about packed structs, but I still can't get it to work. Does someone know the solution to this? Thanks in advance! DGreetings, SAM