我真的很感激,如果任何解释可以给出下面的一段代码的输出。我不明白为什么sizeof(struct_2)
和sizeof(my_struct_2)
是不同的,提供sizeof(struct_1)
和sizeof(c_int)
是相同。为什么sizeof在ctypes struct packing的给定示例中有所不同?
看来包装struct
在struct
以不同的方式吗?
from ctypes import *
class struct_1(Structure):
pass
int8_t = c_int8
int16_t = c_int16
uint8_t = c_uint8
struct_1._fields_ = [
('tt1', int16_t),
('tt2', uint8_t),
('tt3', uint8_t),
]
class struct_2(Structure):
pass
int8_t = c_int8
int16_t = c_int16
uint8_t = c_uint8
struct_2._fields_ = [
('t1', int8_t),
('t2', uint8_t),
('t3', uint8_t),
('t4', uint8_t),
('t5', int16_t),
('t6', struct_1),
('t7', struct_1 * 6),
]
class my_struct_2(Structure):
#_pack_ = 1 # This will give answer as 34
#_pack_ = 4 #36
_fields_ = [
('t1', c_int8),
('t2', c_uint8),
('t3', c_uint8),
('t4', c_uint8),
('t5', c_int16),
('t6', c_int),
('t7', c_int * 6),
]
print "size of c_int : ", sizeof(c_int)
print "size of struct_1 : ", sizeof(struct_1)
print "size of my struct_2 : ", sizeof(my_struct_2)
print "siz of origional struct_2: ", sizeof(struct_2)
OUTPUT:
size of c_int : 4
size of struct_1 : 4
size of my struct_2 : 36
siz of origional struct_2: 34 ==> why not 36 ??
编辑: 重命名t6-> T7(struct_1的阵列)和从struct_2除去包 = 2。但我仍然看到不同大小struct_2
和my_struct_2
这是什么语言?如果“C”使用了我不熟悉的扩展名。 –
对我来说看起来像Python,而不是C. – Barmar
我认为这是因为'struct_2'是打包的,所以't5'后面没有填充。但'my_struct_2'没有打包,所以't5'和't6'之间有2个字节的填充字符以使它字对齐。 – Barmar