我正在开发一个重量级应用程序,其中应用程序是在系统上运行的唯一应用程序。在最近的一次性能运行中发现,我们花了很多时间去解决一个非常大的指针向量。我发现我们有大量的swapin / out以及给我一个指示,可能是从ram释放的向量元素内存。我可以确保我的向量中包含的指针所指向的元素永远不会从ram中消失。 Gcc 4.8和非c ++ 11。红帽v6.5。根据管理决定,我们不能使用c ++ 11。
答案 0 :(得分:3)
您无法使用任何C ++语言功能解决此问题。您需要的是操作系统的支持。
幸运的是,Linux提供了一个API,可以标记不应该被换出的内存页面。您可以在mman.h中找到这些:mlock man page
因此,如果您希望矢量始终存在于RAM中,您应该:
请记住:操作系统不会无缘无故地换掉内存。如果您的矢量的一部分位于硬盘上,那么您最近访问的其他内容就更为重要。如果您开始尝试使用不可挽回的内存,请准备好一些性能惊喜。操作系统已经尝试做到最好。