我一直在试图让一段代码工作来重新分配一个巨大的非托管矩阵结构(即std::vector<std::vector<T> >
)到一个等效的托管结构(cli::array<T,2>
)。由于我无法同时在内存中保存两个结构,我选择写入文件并读取结构。问题是,一旦我删除了原始矩阵,并且因此尝试为矩阵分配托管内存的内存失败。从非托管到托管的矩阵重新分配
我形象这可能与不同的运行时堆cpp vs clr有关。但找不到任何具体的细节。 cpp运行时是否可能保留堆空间,从而阻止clr堆将矩阵分配回来?如果是这样,是否可以强制cpp运行时清理堆空间以便为clr堆留出空间。
现在,为了澄清,目标矩阵必须是一个二维数组,而不是锯齿状数组。我知道这有问题,不能调整大小。否则,我可能可以通过更小的块来移动矩阵。
谢谢,提前。
不能使用锯齿阵列是一个相当人为的限制。它当然可以解决你的地址空间碎片问题。 64位操作系统是简单的解决方法。 – 2012-03-09 13:26:53