【发布时间】:2012-03-26 20:16:03
【问题描述】:
我一直试图让一段代码重新分配一个巨大的非托管矩阵结构(即std::vector<std::vector<T> >)到一个等效的托管结构(cli::array<T,2>)。由于我不能同时将两个结构都保存在内存中,我选择写入文件并读回结构。问题是,一旦我删除了原始矩阵,尝试为矩阵分配托管内存的内存就会失败。
我认为这可能与不同运行时 cpp 与 clr 的堆有关。但是找不到具体的细节。 cpp 运行时是否有可能保留堆空间,从而阻止 clr 堆重新分配矩阵?如果是这样,是否可以强制 cpp 运行时清理堆空间以便为 clr 堆腾出空间。
现在澄清一下,目标矩阵必须是二维数组,而不是锯齿状数组。我知道这有无法调整大小的问题。否则我也许可以将矩阵移动更小的块。
谢谢,提前。
【问题讨论】:
-
不能使用锯齿状数组是一个相当人为的限制。它确实解决了您的地址空间碎片问题。 64 位操作系统是简单的解决方法。
标签: .net c++-cli heap-memory