我的结构如下:
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的内容可以通过迭代器访问