2014-09-26 37 views
0

我在我的代码如下标签联合: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个字节?

+0

编译器如何布置结构? – 2014-09-26 21:35:23

+0

@DavidHeffernan:它使用'type'的第一个字节,'nref'使用三个字节,union按预期使用12个字节。最后4个字节是零(从我看到的,如果我没有遗漏任何东西)。 – 2014-09-26 21:37:49

+0

你的意思是填充而不是零,我猜。 – 2014-09-26 21:38:59

回答

2

在OS X:

sizeof(off_t) == 8 

在Linux上:

sizeof(off_t) == 4 

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

+0

谢谢。将其更改为“ptrdiff_t”,“off_t”实际上用于文件。 – 2014-09-26 22:09:13