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

C++ 我可以确保向量元素始终在内存中吗,c++,c++98,C++,C++98,我正在开发一个重载应用程序,其中该应用程序是系统上运行的唯一应用程序。在最近的一次性能运行中,发现我们在对非常大的指针向量进行去引用时花费了很多时间。我发现我们有大的交换/输出,这也给了我一个可能是向量元素内存从ram中释放出来的指示。我可以确保向量中包含的指针指向的元素永远不会离开ram吗。GCC4.8而不是c++11。红帽v6.5。我们不能使用C++ 11作为管理的划分。< / P> < P>不能用任何C++语言解决这个问题。您需要的是操作系统的支持 幸运的是,Linux提供了一个API,允

我正在开发一个重载应用程序,其中该应用程序是系统上运行的唯一应用程序。在最近的一次性能运行中,发现我们在对非常大的指针向量进行去引用时花费了很多时间。我发现我们有大的交换/输出,这也给了我一个可能是向量元素内存从ram中释放出来的指示。我可以确保向量中包含的指针指向的元素永远不会离开ram吗。GCC4.8而不是c++11。红帽v6.5。我们不能使用C++ 11作为管理的划分。< / P> < P>不能用任何C++语言解决这个问题。您需要的是操作系统的支持

幸运的是,Linux提供了一个API,允许您标记不应被交换的内存页。您可以在mman.h中找到这些:

因此,如果希望向量始终存在于RAM中,则应:

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

请记住:操作系统不会无缘无故地交换内存。如果向量的一部分位于硬盘上,那么最近访问过的其他内容更重要。如果您开始尝试不可移动内存,请准备好迎接一些性能惊喜。操作系统已经尽力做到最好。

你不能用任何C++语言解决这个问题。您需要的是操作系统的支持

幸运的是,Linux提供了一个API,允许您标记不应被交换的内存页。您可以在mman.h中找到这些:

因此,如果希望向量始终存在于RAM中,则应:

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

请记住:操作系统不会无缘无故地交换内存。如果向量的一部分位于硬盘上,那么最近访问过的其他内容更重要。如果您开始尝试不可移动内存,请准备好迎接一些性能惊喜。操作系统已经尽力做到最好。

你是指GCC 4.8还是C++ 4.8(不存在)?向量元素不是“从RAM释放”;它们从RAM中交换出来,但仍在(虚拟)内存中。此外,.也有问题更新,我们不能按照政策迁移到c++11。那么有没有办法避免这种交换?(a)重新设计应用程序,使其不需要太多内存。(b) 购买更多内存。如果你能在RAM中锁定数据,你很可能会发现另一块内存被寻呼,你是指GCC 4.8还是C++ 4.8(它不存在)?矢量元素不是“从RAM释放”;它们从RAM中交换出来,但仍在(虚拟)内存中。此外,.也有问题更新,我们不能按照政策迁移到c++11。那么有没有办法避免这种交换?(a)重新设计应用程序,使其不需要太多内存。(b) 购买更多内存。如果您设法将数据锁定在RAM中,您很可能会发现另一块内存被分页进出。