C ++ io流与mmap

时间:2015-11-28 21:59:25

标签: c++ io iostream mmap

我正在用C ++开始一个关键值存储的小项目。我想知道C ++ std流在可伸缩性和性能方面与mmap相比如何。与使用mmap / lseek相比,如何在不适合RAM的文件中使用ifstream :: seekg?

1 个答案:

答案 0 :(得分:2)

最终,任何Linux用户登陆应用程序都在使用syscalls(2),包括C ++ I / O库。

非常谨慎mmapmadvise(或lseek + read& posix_fadvise)可能更有效率C ++流(使用read和其他syscalls(2) ...);但滥用系统调用(例如read - 缓冲区太小)可能会带来灾难性的性能

此外,Linux有一个非常好的page cache(用于包含最近访问的文件数据的一部分)。性能还取决于file system(硬件-SSD和机械硬盘是不同的野兽和计算机)。

也许你不应该重新发明自己的东西并使用sqlitegdbmredismongodbpostgresql或{{ 3}}等等......

性能和权衡取决于实际使用(笔记本电脑上的单个4Gbytes日志文件与数据中心中的PB级视频或基因组数据不同)。所以基准测试(注意许多工具,比如我提到的工具可以明智地调整)。