[issue11920] ctypes: Strange bitfield structure sizing issue
Santoso Wijaya
report at bugs.python.org
Mon Apr 25 21:49:34 CEST 2011
Santoso Wijaya <santoso.wijaya at gmail.com> added the comment:
What compilers were used to build your Python distro and the native structure?
I found out in _ctypes/cfield.c (lns. 76-95):
if (bitsize /* this is a bitfield request */
&& *pfield_size /* we have a bitfield open */
#ifdef MS_WIN32
/* MSVC, GCC with -mms-bitfields */
&& dict->size * 8 == *pfield_size
#else
/* GCC */
&& dict->size * 8 <= *pfield_size
#endif
&& (*pbitofs + bitsize) <= *pfield_size) {
/* continue bit field */
fieldtype = CONT_BITFIELD;
#ifndef MS_WIN32
} else if (bitsize /* this is a bitfield request */
&& *pfield_size /* we have a bitfield open */
&& dict->size * 8 >= *pfield_size
&& (*pbitofs + bitsize) <= dict->size * 8) {
/* expand bit field */
fieldtype = EXPAND_BITFIELD;
#endif
So the allocation of the extra byte for the structure seems to depend on Python's compiler. To make sure, I compiled a native structure using MSVC:
#pragma pack(1)
typedef struct _struct1
{
UINT8 first : 1;
UINT8 second : 1;
UINT8 third : 1;
UINT8 fourth : 1;
UINT8 fifth : 1;
UINT16 pad : 11;
} struct1;
And I got the same value (sizeof == 3).
----------
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue11920>
_______________________________________
More information about the Python-bugs-list
mailing list