我有一个使用多个非常大的double数组的c++程序,我想减少程序的内存占用。目前,我正在分配100个数组,每个数组可能需要100Mb。
现在,我有一个优势,即这些数组的某些部分在程序执行的后期变得过时了,因此没有必要一次性将它们全部保留在内存中。
我的问题是:
是否有一种方法可以在我使用new或malloc创建数组之后告诉操作系统不再需要其中的一部分?
我得出的结论是,唯一的实现方法可能是声明一个指针数组,每个指针可能指向所需数组的1Mb块,以便不需要的旧块可以重用于新的数组部分。这似乎是编写自定义内存管理器,会对性能造成影响。
我无法移动数组中的数据,因为这将导致太多的线程争用问题。这些数组可由任意数量的线程访问,但只有一个线程会写入到任何一个给定的数组中。
现在,我有一个优势,即这些数组的某些部分在程序执行的后期变得过时了,因此没有必要一次性将它们全部保留在内存中。
我的问题是:
是否有一种方法可以在我使用new或malloc创建数组之后告诉操作系统不再需要其中的一部分?
我得出的结论是,唯一的实现方法可能是声明一个指针数组,每个指针可能指向所需数组的1Mb块,以便不需要的旧块可以重用于新的数组部分。这似乎是编写自定义内存管理器,会对性能造成影响。
我无法移动数组中的数据,因为这将导致太多的线程争用问题。这些数组可由任意数量的线程访问,但只有一个线程会写入到任何一个给定的数组中。
mmap
一个大区域,然后在您完成使用它们后munmap
其中的一部分。 - Mike Seymour