在OS X上使用-m32编译的联合的冗余大小

时间:2014-09-26 21:30:42

标签: c gcc clang unions memory-alignment

我的代码中有以下标记的联合:https://github.com/EarlGray/SECD/blob/f2e364f84d194aea5cef9257630bf931e9f88cab/secd.h#L217

当我使用gcc或clang在64位Linux或OS X上编译它时,cell_t的大小总是32字节(4 * sizeof(long),如预期的那样)。

当我使用-m32开关在Linux(Ubuntu 14.04,gcc 4.8)上编译它时,大小为16字节(如预期的那样)。

当我使用带有-m32的gcc(4.8)或clang(Apple 6.0)在OS X(10.9.5)上编译相同的代码时,大小为20个字节。我试图调试程序,看看是否有任何可能使用第五个单词的联合案例,找不到任何。它不依赖于优化级别和调试信息存在。

为什么sizeof(cell_t)是20个字节的任何想法?

1 个答案:

答案 0 :(得分:2)

在OS X上:

sizeof(off_t) == 8

在Linux上:

sizeof(off_t) == 4

您在string_t中使用该类型。可能还有其他场合,但这是我遇到的第一次。