我有一个 c++ 程序,它使用了几个非常大的双精度数组,我想减少程序这个特定部分的内存占用。目前,我分配了 100 个,每个可以是 100 Mb。
现在,我确实有优势,这些数组的一部分最终在程序执行的后期部分变得过时,并且几乎不需要在任何时候将其中任何一个都保存在内存中。
我的问题是这样的:
在我用 new 或 malloc 创建数组后,有什么方法可以告诉操作系统它的一部分不再需要了?我得出的结论是,实现这一点的唯一方法是声明一个指针数组,每个指针都可能指向一个块,比如 1Mb 的所需数组,这样不再需要的旧块可以重新用于数组的新位。在我看来,这就像编写一个自定义内存管理器,看起来有点像大锤,这也会对性能造成一些影响
我无法移动数组中的数据,因为它会导致过多的线程争用问题。数组可以随时被大量线程中的任何一个访问,尽管只有一个线程会写入任何给定的数组。