c – sizeof在编译不同程序时返回结构的不同值

我有2个共享头文件的程序.此头文件定义具有少量成员的结构.然后是#define:#define STRUCTURE_SIZE sizeof(OUR_STRUCTURE).

然后在共享内存中使用此结构,STRUCTURE_SIZE用于shmget()的size参数.

不幸的是,对于一个程序,STRUCTURE_SIZE最终为20758,而在另一个程序中,它最终为20764.因此,当第二个程序试图获取共享内存时,shmget()返回EINVAL.

uname -a:

Linux机器2.6.30.10-105.2.23.fc11.i686.PAE#1 SMP 2月11日07:05:37 UTC 2010 i686 i686 i386 GNU / Linux

g –version:

g(GCC)4.4.1 20090725(红帽4.4.1-2)

最佳答案
一些可能性:

>您正在使用不同的编译器和/或编译器开关编译这两个程序
>你有一个标题出现在其中一个程序中的标题之前,这与#pragma pack或类似的混淆并且不会恢复设置
>在两个程序中以不同方式定义共享结构中使用的类型

(注意:最后两点可以递归地应用于问题结构中使用的任何其他结构.)

转载注明原文:c – sizeof在编译不同程序时返回结构的不同值 - 代码日志