gpt4 book ai didi

c++ - 附加到内存映射文件

转载 作者:IT老高 更新时间:2023-10-28 21:39:17 26 4
gpt4 key购买 nike

我不断地附加到股票报价文件(整数、多头、 double 等)。我用 mmap 将此文件映射到内存中。

使新附加的数据作为内存映射的一部分可用的最有效方法是什么?

我知道我可以再次打开文件(新文件描述符),然后对其进行映射以获取新数据,但这似乎效率低下。向我建议的另一种方法是将文件预分配为 1mb block ,写入特定位置直到结束,然后将文件 ftruncate 到 +1mb。

还有其他方法吗?

Boost 对此有帮助吗?

最佳答案

Boost.IOStreams 只有固定大小 memory mapped files ,所以它对您的具体问题没有帮助。 Linux 有一个接口(interface) mremap,其工作原理如下:

void *new_mapping = mremap(mapping, size, size + GROWTH, MREMAP_MAYMOVE);
if (new_mapping == MAP_FAILED)
// handle error
mapping = new_mapping;

但是,这是不可移植的(并且文档记录不充分)。 Mac OS X 似乎没有 mremap

在任何情况下,您都不需要重新打开文件,只需 munmapmmap 再次:

void *append(int fd, char const *data, size_t nbytes, void *map, size_t &len)
{
// TODO: check for errors here!
ssize_t written = write(fd, data, nbytes);
munmap(map, len);
len += written;
return mmap(NULL, len, PROT_READ, 0, fd, 0);
}

预分配方案在这里可能非常有用。请务必跟踪文件的实际长度并在关闭前再次截断它。

关于c++ - 附加到内存映射文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4460507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com