【问题标题】:Why is alignof(max_align_t) 16?为什么 alignof(max_align_t) 是 16?
【发布时间】:2020-04-30 20:05:51
【问题描述】:

我在 x86_64 Intel 处理器上运行 Debian。

gcc (Debian 8.3.0) 编译以下程序

#include <stdio.h>
#include <stdalign.h>
#include <stddef.h>

int main(){
  printf("%zd\n",alignof(max_align_t));
}

和输出

16

什么数据类型需要 16 字节对齐?

【问题讨论】:

  • __int128。此外,它完全可以是任意值 AFAIK。
  • 经常long double.
  • max_align_t 保证“至少和最大类型一样大”,而不是“完全一样大”。所以即使最大的数据类型只有 8,它也可能是 16。

标签: c memory-alignment alignof


【解决方案1】:

在 x86_64 上,_Alignof(long double)==16

【讨论】:

  • 除非指定-m96bit-long-double
  • @phuclv:这与 ABI 相悖,并且生成的代码无法与符合 ABI 的正常 x86_64 代码链接。
猜你喜欢
  • 2011-10-26
  • 2015-11-10
  • 1970-01-01
  • 2019-10-03
  • 2021-11-03
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
相关资源
最近更新 更多