我有一个使用几个非常大的双打数组的C++程序,我想减少程序的这个特定部分的内存占用量。目前,我正在分配其中的100个,每个可能是100 Mb。如何管理大型阵列
现在,我确实有这样的优势,即在程序执行的后期部分,这些数组的最终部分会变得过时,并且几乎不需要在任何时候将任何一个内存中的任何一个存储在内存中。
我的问题是这样的:
有没有告诉我OS创建新的或malloc的数组是它的一部分,不需要任何更多的后什么办法? 我得出的结论是,实现这一目标的唯一方法是声明一个指针数组,每个指针可以指向一个数据块,称为所需数组的1Mb,以便不需要的旧数据块更多可以重新用于阵列的新位。在我看来,像写一个自定义的内存管理器,看起来像是一个大锤,这将创建一个性能点击以及
我不能移动数组中的数据,因为它要走了导致太多的线程争用问题。数组可以随时被大量线程中的任何一个线程访问,尽管只有一个线程可以写入任何给定的数组。
通常,对于非常大数组问题的答案是使用*稀疏数组* - 看起来像数组的数据结构,但实际上只存储相关元素。如果大部分数组都是空白的,这将起作用。这是真的吗?或者在某种程度上你是否真的需要给定数组中的所有元素? – 2012-04-20 11:25:52
平台特定的解决方案是否可以接受? Posix允许你在一个大的区域进行'mmap',然后在你完成之后'munmap'部分的完成。 – 2012-04-20 11:26:33