我在我的代码如下标签联合:https://github.com/EarlGray/SECD/blob/f2e364f84d194aea5cef9257630bf931e9f88cab/secd.h#L217工会的冗余大小与-m32在OS X上编译
当我使用gcc或铛OS X的cell_t
大小总是编译在64位Linux或32字节(4 * sizeof(long)
,如预期)。
当我在Linux(Ubuntu 14.04,gcc 4.8)上使用-m32
开关进行编译时,大小为16字节(如预期的那样)。
当我使用gcc(4.8)或clang(Apple 6.0)和-m32
在OS X(10.9.5)上编译相同的代码时,大小为20个字节。我试图调试该程序,并查看是否有可能使用第五个单词的任何工会案件,但没有找到任何案例。它不依赖于优化和调试信息存在的级别。
任何想法为什么sizeof(cell_t)
是20个字节?
编译器如何布置结构? – 2014-09-26 21:35:23
@DavidHeffernan:它使用'type'的第一个字节,'nref'使用三个字节,union按预期使用12个字节。最后4个字节是零(从我看到的,如果我没有遗漏任何东西)。 – 2014-09-26 21:37:49
你的意思是填充而不是零,我猜。 – 2014-09-26 21:38:59