在内存映射文件中分配对象

时间:2017-06-21 08:55:27

标签: c++ memory-management dynamic-memory-allocation memory-mapped-files solaris-10

我的结构如下:

struct 
{
   int x;
   char szT[200];
   int y;
} XX;

我有一个文件存储了几个这些XX对象,通过fwrite调用写入。 现在,当我使用mmap将文件读作内存mmaped文件时,我使用as:

// sz = size of the file in bytes
// fd = file descriptor of the file opened through fopen in O_RDWR mode
char *p = (char *) mmap(0,sz,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);

将内容存储在矢量中:

vector<XX *> av;
unsigned int N = (sz / sizeof(XX));
av.resize(N);
XX *px = (XX*) p;
int i;
for(i=0;i<N;++i) {
    px[i] = p + i;
}

稍后访问XX对象的矢量av。 当我使用

清除矢量时
av.clear();

我是否需要调用所有XX对象的析构函数,否则它们会被自动销毁?或者不是必需的,因为这是一个指针的向量,那么我的问题也是当我做px[i] = p + i;如上所示,是XX构造函数被调用? mmap是否分配了多少空间? av的使用可能显得额外负担。但这是遗留代码的一部分,需要在约束内进行优化。 av的目的是根据结构中的元素提供对文件内容的轻松访问。因为vector的内容可以通过迭代器访问

0 个答案:

没有答案