考虑以下代码
#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
答案 0 :(得分:0)
是的,编译32&amp;时存在对齐差异。 64位代码,但据我所知,标准中没有任何内容可以告诉你它们是如何不同的。
您可能会看到uint64_t在8字节边界上对齐,并且在B.var3和B.var5之间有4个字节的填充。
当然,我可能错了,填充可能在任何地方。