gpt4 book ai didi

c++ - 我可以确保 vector 元素始终在内存中吗

转载 作者:行者123 更新时间:2023-11-27 23:50:06 25 4
gpt4 key购买 nike

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

最佳答案

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

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

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

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

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

关于c++ - 我可以确保 vector 元素始终在内存中吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47148884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com