gpt4 book ai didi

C++ io 流与 mmap

转载 作者:搜寻专家 更新时间:2023-10-31 02:19:02 29 4
gpt4 key购买 nike

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

最佳答案

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

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

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

也许你不应该重新发明你自己的东西并使用sqlite , 或 gdbm , 或 redis , 或 mongodb , 或 postgresql , 或 memcached等等……

性能和权衡取舍在很大程度上取决于实际使用情况(笔记本电脑上的单个 4GB 日志文件与数据中心中数 PB 的视频或基因组数据不同)。所以进行基准测试(并注意像我提到的那样的许多工具都可以进行明智的调整)。

关于C++ io 流与 mmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33976891/

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