2

我一直试图找出 x86-64 mac 和 linux 中 long double 所需的对齐方式。我发现了各种暗示不同要求的不同事物,但找不到权威来源。

我在 Mac OS X 上发现,gcc 有时会生成使用 movaps 复制长双精度的代码,这需要 16 字节对齐。但是clang没有,而且gcc已经很老了,所以也许这只是一个不会被修复的老错误?

4

1 回答 1

4

Linux x86_64 ABI 指定 long double 应为 16 字节对齐。这与 32 位 x86 Linux ABI 不同,后者指定 long double 仅 4 字节对齐(在当前 CPU 上不是最理想的,但已成为历史产物)。

我不确定 Mac OSX x86 ABI,但如果他们保留这样的历史包袱,我会感到惊讶。因此我的猜测是 16 字节对齐。

于 2012-10-17T16:46:41.947 回答