如何将结构导出到文件,然后将内存映射到文件?

Tri*_*tan 2 c++ struct mmap memory-mapped-files memory-mapping

我有一个结构,我想导出到一个文件,然后mmap()该文件.一个问题是struct有一个成员变量是一个字符串,我不确定mmap如何处理它.在这种情况下,所有这些字符串都具有相同的大小,8个字符.我正在使用Windows,虽然我正在使用我在网上找到的mmap()函数,该函数应该复制Linux mmap()函数.

结构本身定义为:

struct testStruct
{
    string testString;
    unsigned int testInt;
    unsigned int tsetArr[9];
};
Run Code Online (Sandbox Code Playgroud)

是否可以为对象定义sizeof()的返回值?

是否可以映射包含结构数据的文件?

我必须使用什么代码将结构导出到文件,然后mmap它?

Fre*_*Foo 6

std::stringC++标准不保证表示,因此这不起作用.std::string可以(并且通常会)将其内容分配到堆上的任何位置,因此您将存储指针和大小成员,而不是字符串本身.

但是,char具有编译时常量大小的数组tsetArr应该可以工作.

是否可以为对象定义sizeof()的返回值?

编号sizeof不是函数,所以你不能重载它(严格来说,它有一个,但不是返回值,因为它不会从任何地方返回 ;它由编译器扩展为常量).

是否可以映射包含struct数据的文件?

可能,是的,但我建议不要这样做; 你的代码将不可移植,甚至可能不会在同一平台上的不同编译器上,而且你的代码struct是一成不变的.如果你想这样做,只有mmap没有指针成员的POD(普通旧数据),并且每次更改定义时都会增加一个unsigned version成员struct.