结构尺寸在32位和64位不同

时间:2018-03-07 23:53:03

标签: c++ padding

考虑以下代码

#include <iostream>

typedef struct A
{
    uint32_t var1;
    uint32_t var2;
    uint32_t var3;
    uint32_t var4;
    uint32_t var5;
} A_t;
typedef struct B
{
    uint32_t var1;
    uint32_t var2;
    uint32_t var3;
    uint64_t var5;
} B_t;

int main(){
    std::cout << "Size of A: " << sizeof(A_t) << std::endl;
    std::cout << "Size of B: " << sizeof(B_t) << std::endl; 

}

使用gcc正常编译它会得到以下输出

Size of A: 20
Size of B: 24

使用-m32标志进行编译会得到以下结果:

Size of A: 20
Size of B: 20

在32位与64位编译时填充的方式有区别吗?我正在x86_64-apple-darwin17.3.0运行gcc

1 个答案:

答案 0 :(得分:0)

是的,编译32&amp;时存在对齐差异。 64位代码,但据我所知,标准中没有任何内容可以告诉你它们是如何不同的。

您可能会看到uint64_t在8字节边界上对齐,并且在B.var3和B.var5之间有4个字节的填充。

当然,我可能错了,填充可能在任何地方。

相关问题