内存映射文件和最大文件大小

Memory Mapped Files and Max File Size

我正在使用 boost::iostreams::mapped_file_source 创建内存映射文件。超过 1024。令我惊讶的是,当我创建了大约 1024 个内存映射文件时,我的程序抛出异常,指出打开的文件太多。经过一些研究,我发现 Ubuntu 每个进程使用的最大文件大小为 1024(从 ulimit -n 中找到)。不幸的是,我需要同时打开所有文件。有谁知道解决这个问题的方法吗?是否有可能以某种方式使文件不计入限制?我正在考虑尝试将它们组合成一个文件;但是,由于性能原因,我想尽可能避免这种情况。而且我也不想通过更改值来修改操作系统。任何正确方向的点都非常感谢!

为什么需要打开很多映射文件?这看起来效率很低。也许您可以映射单个大文件的(区域)?

Q. I was thinking of trying to combine them into a single file; however, I would like to avoid that if possible due to the performance

那是……废话。性能基本上只能提高。

要记住的一件事是将 "big mapped file" 内的不同区域与内存 page/disk 块大小的倍数对齐。 4k 应该是这种粗对齐的不错起点。