2

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

结构本身定义为:

struct testStruct
{
    string testString;
    unsigned int testInt;
    unsigned int tsetArr[9];
};

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

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

我必须使用什么代码将结构导出到文件,然后对其进行映射?

4

2 回答 2

6

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

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

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

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

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

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

于 2011-05-04T18:33:50.310 回答
1
struct testStruct
{
    char testString[9];
    unsigned int testInt;
    unsigned int tsetArr[9];
};
于 2011-05-04T22:14:03.777 回答