c – 64位机器上的结构填充
发布时间:2020-12-16 03:34:17 所属栏目:百科 来源:网络整理
导读:struct A{ uint32_t var1; uint32_t var2; uint32_t var3; uint32_t var4; uint32_t var5;}; 在上面的结构中,编译器不会填充并分配20个字节. 现在我们有另一个结构,它包含一个8字节变量而不是两个4字节.在这种情况下,编译器填充并为此结构分配24个字节. stru
struct A { uint32_t var1; uint32_t var2; uint32_t var3; uint32_t var4; uint32_t var5; }; 在上面的结构中,编译器不会填充并分配20个字节. 现在我们有另一个结构,它包含一个8字节变量而不是两个4字节.在这种情况下,编译器填充并为此结构分配24个字节. struct B { uint32_t var1; uint32_t var2; uint32_t var3; uint64_t var5; }; 为什么会出现这种行为? 编译器:GCC 解决方法
对齐规则(在x86和x86_64上)通常是将变量对齐它的大小.
换句话说,32位变量在4个字节上对齐,8位字节上的64位变量等. 在第二种情况下,在两者之间添加4个字节的填充 uint32_t var3; uint64_t var5; 让var5在8个字节上对齐. 出于这个原因,最好从大到小订购数据成员(但由于数据局部性,可读性等原因,这并不是那么简单). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |