是否有跨平台的方法来促进读取大型 Boost 内存 mapped_file 的预取?
Are there cross-platform ways to promote prefetching for reading a large Boost memory mapped_file?
我有一个用于 Windows 和 Linux 的 C++ 应用程序(例如亚马逊上的 Boost 1.53.2 Linux),它使用 Boost::iostream:: mapped_file(即内存映射文件)。 The documentation 没有提到 "prefetch".
应用程序需要快速依次读取大型只读文件。有时这些文件会比可用内存大。因此,一次将整个文件加载到内存中可能不是一种选择。但在所有情况下,处理都会按顺序从头到尾进行。
如果即将到来的页面的预取以一种保持在页面处理之前的方式进行(即即将到来的页面在需要之前在内存中),但又不会超前到尚未处理的程度,那将会很有帮助页面从内存中删除以腾出空间。
我想知道是否有有用的跨平台方式(Windows 和 Linux)来提供提示或指导或以其他方式促进自动预取不遥远的未来。我希望 OS 可能会在某种程度上自动执行此操作,但我想知道是否应该使用一种方便的技术来改进默认行为。
提前致谢!
不确定便携性如何,但我在这个答案中包含了 fadvise
和 madvise
:
- boost file_mapping performance
这里似乎有一些针对非 POSIX windows 的好建议:What is fadvise/madvise equivalent on windows?
我有一个用于 Windows 和 Linux 的 C++ 应用程序(例如亚马逊上的 Boost 1.53.2 Linux),它使用 Boost::iostream:: mapped_file(即内存映射文件)。 The documentation 没有提到 "prefetch".
应用程序需要快速依次读取大型只读文件。有时这些文件会比可用内存大。因此,一次将整个文件加载到内存中可能不是一种选择。但在所有情况下,处理都会按顺序从头到尾进行。
如果即将到来的页面的预取以一种保持在页面处理之前的方式进行(即即将到来的页面在需要之前在内存中),但又不会超前到尚未处理的程度,那将会很有帮助页面从内存中删除以腾出空间。
我想知道是否有有用的跨平台方式(Windows 和 Linux)来提供提示或指导或以其他方式促进自动预取不遥远的未来。我希望 OS 可能会在某种程度上自动执行此操作,但我想知道是否应该使用一种方便的技术来改进默认行为。
提前致谢!
不确定便携性如何,但我在这个答案中包含了 fadvise
和 madvise
:
- boost file_mapping performance
这里似乎有一些针对非 POSIX windows 的好建议:What is fadvise/madvise equivalent on windows?