我正在开发一个重量级应用程序,该应用程序是系统上唯一运行的应用程序。在最近的一次性能运行中,我们发现我们花了很多时间来解引用一个非常大的指针向量。我发现我们也有很大的swapin/out,这给了我一个可能是向量元素内存从ram中释放的迹象。我能确保我的向量中包含的指针指向的元素永远不会离开ram吗?而不是c++11。Red hat v6.5。根据管理规定,我们不能使用c++ 11。
我需要一个大的动态数组。我不知道它能达到多大的尺寸,但我可以设置一个很大的上限,比如1G。
我知道的动态数组实现,当它们达到最大容量时,分配一个新的更大的缓冲区,将数据复制到它并释放旧的缓冲区。我想避免这种情况,所以我考虑保留一大块虚拟内存,只在需要时将虚拟内存页映射到物理内存中。除了效率之外,该方法的一个优点是保证了项目的地址不会改变。
我在想一种类似于此的逻辑:
// the memory used by the dynamic array
item_t* buffer = reserve_virtual_memory( 1gigabyte );
size_t len = 0; // h