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

C++ 内存映射文件和最大文件大小,c++,boost,memory-mapped-files,C++,Boost,Memory Mapped Files,我正在使用boost::iostreams::mapped_file_source创建内存映射文件。超过1024个。令我惊讶的是,当我创建了大约1024个内存映射文件时,我的程序会抛出一个异常,说明打开的文件太多。经过一些研究,我发现Ubuntu使用的每个进程的最大文件大小为1024(从ulimit-n中找到)。不幸的是,我需要同时打开所有文件。有人知道怎么解决这个问题吗?是否可以通过某种方式使文件不计入限制?我想把它们合并成一个文件;但是,由于性能原因,我希望尽可能避免这种情况。我也不想通过改

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

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

Q.我正在考虑将它们合并成一个文件;但是,由于性能原因,我希望尽可能避免这种情况

那是。。。胡说性能基本上只能提高


需要记住的一点是,将“大映射文件”中的不同区域与内存页/磁盘块大小的倍数对齐。4k应该是这种粗略对齐的良好开端。

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

Q.我正在考虑将它们合并成一个文件;但是,由于性能原因,我希望尽可能避免这种情况

那是。。。胡说性能基本上只能提高


需要记住的一点是,将“大映射文件”中的不同区域与内存页/磁盘块大小的倍数对齐。4k应该是这个粗略对齐的良好开端。

您可能想检查这个问题您可能想检查这个问题,因为这样可以减少开销(显然,因为您的配置下的特定资源已经用完了…)。另一方面,您显然不需要一直打开/重新打开映射(您可以只打开一个映射)。常见的误解是“这将占用太多的RAM”,但虚拟内存根本不是这样工作的。(关于最后一个主题:,也可能很有趣:)首先,您将减少开销(显然,因为您的配置下的特定资源已经用完了…)。另一方面,您显然不需要一直打开/重新打开映射(您可以只打开一个映射)。常见的误解是“这将占用太多的RAM”,但虚拟内存根本不是这样工作的。(关于最后一个主题:,也可能很有趣:)