classification
Title: struct.calcsize returns strange size
Type: behavior Stage:
Components: Library (Lib) Versions: Python 2.6
process
Status: closed Resolution: invalid
Dependencies: Superseder:
Assigned To: Nosy List: igor.mikushkin, mark.dickinson
Priority: normal Keywords:

Created on 2009-10-23 10:24 by igor.mikushkin, last changed 2009-10-23 10:37 by mark.dickinson. This issue is now closed.

Messages (2)
msg94379 - (view) Author: Igor Mikushkin (igor.mikushkin) Date: 2009-10-23 10:24
I think in second case struct size should be 53.

In [31]: struct.calcsize('ihhi35scc')
Out[31]: 49

In [32]: struct.calcsize('ihhi35scci')
Out[32]: 56
msg94380 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2009-10-23 10:37
I think the calcsize result is correct here.  With the native struct 
format, padding is included in the struct.

In the second case, there are three bytes of padding after the 'cc' and 
before the 'i'.  This keeps the 'i' aligned on a 4-byte boundary.  If you 
look at the results of struct.pack, you can see the padding explicitly:

Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import struct
>>> struct.pack('ihhi35scci', 123456789, 10000, 10000, 321456789, 
"abcdefghijklmnopqrstuvwxyz123456789", '+', '*', 231456789)
"\x15\xcd[\x07\x10'\x10'\x95\n)\x13abcdefghijklmnopqrstuvwxyz123456789+*\x
00\x00\x00\x15\xc0\xcb\r"
History
Date User Action Args
2009-10-23 10:37:08mark.dickinsonsetstatus: open -> closed

nosy: + mark.dickinson
messages: + msg94380

resolution: invalid
2009-10-23 10:24:27igor.mikushkincreate