我遇到了C#应用程序和分配内存的COM组件的问题:
C#程序调用用C ++编写的COM DLL中的函数,该函数执行矩阵处理。该函数分配了大量内存(8个100MB块中大约800MB)。这失败了(当从C#调用函数时,malloc返回“错误分配”。
如果我从C程序运行相同的函数,分配相同数量的内存,则分配内存没有问题。
我有8GB内存,Win7 x64并且有足够的可用内存。
如何解决从C#应用程序调用时分配内存的问题? 我试图谷歌它,但不知道该搜索什么。搜索设置堆大小等,但没有给出任何东西。
感觉有点迷失!感谢所有帮助!
答案 0 :(得分:3)
物理内存量(8 GB)不是限制应用程序内存消耗的约束。据推测,您构建了32位应用程序,其基本限制为4 GB的可直接寻址字节。由于历史原因,没有任何魔法的应用程序只有一半 - 2 GB。这是您从中分配的位置,此空间用于满足其他需求。 100 MB卡盘足够大,可以减少因内存/地址碎片而导致的有效可用空间(您不仅需要100个块,还需要连续的块)。
这里最简单的解决方案是构建64位应用程序。那里的限制很遥远。
如果您仍想要32位代码:
/LARGEADDRESSWARE
,将限制范围从2扩展到4 GB