小编use*_*741的帖子

在32位平台上的结构中对齐

在为32位x86 linux运行以下代码时,我得到了意想不到的结果(编译器标志:g ++ -std = c ++ 14 -m32).我试过gcc和clang.

#include <iostream>
using namespace std;

struct S1
{
  uint64_t a;
  uint32_t b;
};

struct S2
{
  alignas(uint64_t) char a[8];
  uint32_t b;
};

int main()
{
  cout << "sizeof(S1)=" << sizeof(S1) << endl;
  cout << "sizeof(S2)=" << sizeof(S2) << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

sizeof(S1)=12
sizeof(S2)=16
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?为什么S1和S2的尺寸不同?据我了解,64位整数值在32位x86机器上与32位对齐.这解释了为什么S1的大小是12个字节.但为什么这不适用于S2呢?

c++ padding alignas

8
推荐指数
1
解决办法
473
查看次数

标签 统计

alignas ×1

c++ ×1

padding ×1