我可以确保向量元素始终在内存中

时间:2017-11-07 02:08:13

标签: c++ c++98

我正在开发一个重量级应用程序,其中应用程序是在系统上运行的唯一应用程序。在最近的一次性能运行中发现,我们花了很多时间去解决一个非常大的指针向量。我发现我们有大量的swapin / out以及给我一个指示,可能是从ram释放的向量元素内存。我可以确保我的向量中包含的指针所指向的元素永远不会从ram中消失。 Gcc 4.8和非c ++ 11。红帽v6.5。根据管理决定,我们不能使用c ++ 11。

1 个答案:

答案 0 :(得分:3)

您无法使用任何C ++语言功能解决此问题。您需要的是操作系统的支持。

幸运的是,Linux提供了一个API,可以标记不应该被换出的内存页面。您可以在mman.h中找到这些:mlock man page

因此,如果您希望矢量始终存在于RAM中,您应该:

  • 分配足够大的内存。
  • 使用mlock标记为不可用
  • 为您的向量编写一个自定义分配器,从您的不可退回的内存块而不是堆中获取内存。

请记住:操作系统不会无缘无故地换掉内存。如果您的矢量的一部分位于硬盘上,那么您最近访问的其他内容就更为重要。如果您开始尝试使用不可挽回的内存,请准备好一些性能惊喜。操作系统已经尝试做到最好。