On Mon, 05 Dec 2011 00:20:32 -0800, Mark Dickinson wrote: >> May be, yes, but since calcsize() is returning 12 when the elements >> are put in the other order, it would seem to be not counting such >> padding. > > Indeed. That's arguably a bug in the struct module,
There's no "arguably" about it. The documentation says: Native size and alignment are determined using the C compiler’s sizeof expression. But given: struct { unsigned long long a; char b[4]; } foo; struct { char b[4]; unsigned long long a; } bar; sizeof(foo) will always equal sizeof(bar). If long long is 8 bytes and has 8-byte alignment, both will be 16. If you want consistency with the in-memory representation used by C/C++ programs (and the on-disk representation used by C/C++ programs which write the in-memory representation directly to file), use ctypes; e.g.: >>> from ctypes import * >>> class foo(Structure): _fields_ = [ ("a", c_ulonglong), ("b", c_char * 4)] >>> sizeof(foo) 16 -- http://mail.python.org/mailman/listinfo/python-list