C#调用COM无法分配内存

时间:2013-12-03 15:38:37

标签: c# .net memory-management com

我遇到了C#应用程序和分配内存的COM组件的问题:

C#程序调用用C ++编写的COM DLL中的函数,该函数执行矩阵处理。该函数分配了大量内存(8个100MB块中大约800MB)。这失败了(当从C#调用函数时,malloc返回“错误分配”。

如果我从C程序运行相同的函数,分配相同数量的内存,则分配内存没有问题。

我有8GB内存,Win7 x64并且有足够的可用内存。

如何解决从C#应用程序调用时分配内存的问题? 我试图谷歌它,但不知道该搜索什么。搜索设置堆大小等,但没有给出任何东西。

感觉有点迷失!感谢所有帮助!

1 个答案:

答案 0 :(得分:3)

物理内存量(8 GB)不是限制应用程序内存消耗的约束。据推测,您构建了32位应用程序,其基本限制为4 GB的可直接寻址字节。由于历史原因,没有任何魔法的应用程序只有一半 - 2 GB。这是您从中分配的位置,此空间用于满足其他需求。 100 MB卡盘足够大,可以减少因内存/地址碎片而导致的有效可用空间(您不仅需要100个块,还需要连续的块)。

这里最简单的解决方案是构建64位应用程序。那里的限制很遥远。

如果您仍想要32位代码:

  • 在托管应用程序二进制文件上启用/LARGEADDRESSWARE,将限制范围从2扩展到4 GB
  • 使用file mappings,您可以将数据保存在物理内存中,并根据需要映射到计量地址空间
  • 分配较小的块