我有一个结构,我想导出到一个文件,然后mmap()该文件。一个问题是该结构有一个字符串的成员变量,我不确定 mmap 如何处理它。在本例中,所有这些字符串的大小相同,为 8 个字符。我正在Windows上工作,尽管我正在使用我在网上找到的mmap()函数,它应该复制Linux mmap()函数。
结构本身定义为:
struct testStruct
{
string testString;
unsigned int testInt;
unsigned int tsetArr[9];
};
是否可以为对象定义 sizeof() 的返回值?
是否可以映射包含结构数据的文件?
我必须使用什么代码将结构导出到文件,然后对其进行 mmap?
> C++标准不保证std::string
的表示,因此这不起作用。 std::string
可以(并且通常会)将其内容分配到堆上的任何位置,因此您将存储指针和大小成员,而不是字符串本身。
不过,具有编译时常量大小的char
数组(例如 tsetArr
)应该可以工作。
是否可以为对象定义 sizeof() 的返回值?
不。 sizeof
不是一个函数,所以你不能重载它(严格来说,它有一个值,但没有返回值,因为它不会从任何地方返回;它由编译器扩展为常量)。
是否可以对包含
struct
数据的文件进行映射?
可能,是的,但我建议不要这样做;你的代码将不可移植,甚至可能无法移植到同一平台上的不同编译器,你的struct
是一成不变的。无论如何,如果您仍想这样做,只需mmap
没有指针成员的 POD(普通旧数据),并在struct
中放置一个 unsigned version
成员,每次更改其定义时都会递增该成员。
struct testStruct
{
char testString[9];
unsigned int testInt;
unsigned int tsetArr[9];
};