将矩阵从非托管重新分配到托管

时间:2012-03-09 11:09:48

标签: .net c++-cli heap

我一直试图让一段代码工作,将一个庞大的非托管矩阵结构(即std::vector<std::vector<T> >)重新分配给一个等效的托管结构(cli::array<T,2>)。因为我不能同时在内存中保存这两个结构,所以我选择写入文件并重新读取结构。问题是,一旦我删除原始矩阵,因此尝试为矩阵分配管理内存的内存将失败。

我认为这可能与不同运行时间cpp vs clr的堆有关。但找不到任何具体细节。 cpp运行时是否可能保留堆空间,这会阻止clr堆分配矩阵?如果是这样,是否可以强制cpp运行时清理堆空间以便为clr堆腾出空间。

现在只是为了澄清,目标矩阵必须是二维数组,而不是锯齿状数组。我知道这个问题无法调整大小。否则我可以用较小的块移动矩阵。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果你不能同时在内存中,我猜这个数组的大小超过千兆字节。如果你想把它放在一个托管的矩形(非锯齿状)数组中,CLR将不得不找到一个千兆字节的连续内存......这可能很容易失败。

您是否尝试过运行64位版本或32位版本的“大地址知识”?如果在64位Windows机器上运行,后者将为您提供4千兆字节的地址空间,它可能适合。