C++ sizeof在编译不同的程序时为结构返回不同的值
我有两个程序共享一个头文件。此头文件定义了一个包含几个成员的结构。然后有一个#define:C++ sizeof在编译不同的程序时为结构返回不同的值,c++,linux,gcc,shared-memory,sizeof,C++,Linux,Gcc,Shared Memory,Sizeof,我有两个程序共享一个头文件。此头文件定义了一个包含几个成员的结构。然后有一个#define:#define STRUCTURE\u SIZE sizeof(我们的结构) 然后,此结构在共享内存中使用,structure\u SIZE用于SIZE的shmget()参数 不幸的是,对于一个程序,结构_大小最终为20758,而在另一个程序中,结构_大小最终为20764。因此,当第二个程序尝试获取共享mem时,shmget()返回EINVAL uname-a: Linux机器2.6.30.10-105.
#define STRUCTURE\u SIZE sizeof(我们的结构)
然后,此结构在共享内存中使用,structure\u SIZE
用于SIZE
的shmget()
参数
不幸的是,对于一个程序,结构_大小最终为20758,而在另一个程序中,结构_大小最终为20764。因此,当第二个程序尝试获取共享mem时,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++--版本
:
g++(GCC)4.4.120090725(Red Hat 4.4.1-2)
几种可能性:
- 您正在使用不同的编译器和/或编译器开关编译这两个程序
- 在其中一个程序中,有另一个标题出现在相关标题之前,这会与
或类似内容发生冲突,并且不会恢复设置#pragma pack
- 共享结构中使用的类型在两个程序中的定义不同
(注意:最后两点可递归应用于问题结构中使用的任何其他结构。)问题可能是打包或对齐问题。了解如何告诉编译器应该如何对齐结构。其他可能性:
- 两个编译中使用的定义集不同,结构是根据这些定义有条件地定义的
- 有些类型在内核和用户空间中可以有不同的大小(这很少见,但也可能发生)
我们的\u结构中的字段偏移量,然后依次使用这两种编译将其打印出来,从而获得一些理解。分解结构的总大小,以确定其每个字段引起的大小
struct OUR_STRUCTURE
{
double d;
other_structure other;
bool flag;
};
OUR_STRUCTURE ours;
cout << &ours.d - &ours << endl;
cout << &ours.other - &ours << endl;
cout << &ours.flag - &ours << endl;
cout << &ours + sizeof(OUR_STRUCTURE) - &ours.flag << endl;
struct我们的结构
{
双d;
其他结构;
布尔旗;
};
我们的组织结构是我们的;
不能发布一些代码。我们的大学结构是什么?我们需要对大学结构进行定义。我会的,但我是一个低级实习生,不知道我是否真的应该。从本质上说,这个结构是系统的核心。您可以始终匿名化成员和类型名称。#pragma pack(8)
修复了它。谢谢