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

xxp*_*por 3 c++ linux gcc sizeof shared-memory

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

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

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

uname -a:

Linux machine 2.6.30.10-105.2.23.fc11.i686.PAE #1 SMP Thu Feb 11 07:05:37 UTC 2010 i686 i686 i386 GNU/Linux

g++ --version:

g++ (GCC) 4.4.1 20090725 (Red Hat 4.4.1-2)

Pau*_*l R 13

一些可能性:

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

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