2016-01-11 5 views
1

После the manual about struct.calcsizeЧто действительно вычисляет struct.calcsize (python)?

truct.calcsize(fmt)¶ 

    Return the size of the struct (and hence of the string) corresponding to the given format 

Но я не понимаю, почему struct.calcsize ('ЯВА') не struct.calcsize ('ч'), плюс два раза по struct.calcsize ('л'). Смотри ниже. Есть идеи?

In [216]: struct.calcsize('hll') 
Out[216]: 24 

In [217]: struct.calcsize('h') 
Out[217]: 2 

In [218]: struct.calcsize('l') 
Out[218]: 8 
+1

«По умолчанию результат упаковки данной C-структуры включает в себя байты с байтами, чтобы поддерживать правильное выравнивание для задействованных типов C. *« Я не понимаю, как это работает точно, но это, вероятно, является частью объяснение. Возможно, 'l' всегда также нуждается в 8 байтах для выравнивания, когда он упакован с другими полями, но когда он один может быть опущен. –

ответ

1

Я бы предположил, что это связано с тем, что элементы прокладки короче машинного слова для эффективности.

Доступ к адресам памяти, кратным длине машинного слова (например, 8 байт для 64-разрядных машин), как правило, быстрее. По этой причине компиляторы C будут заполнять свои структуры, если не указано иное. Модуль struct сделает то же самое для интероперабельности.

Похоже, что он настраивается, в зависимости от того, как вы планируете его использовать.

Смежные вопросы