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

Reply via email to