2GB +内存分配

时间:2012-11-14 17:20:38

标签: c# memory

我需要分配超过2GB的内存。

  1. 我无法使用数组,因为有2GB限制
  2. 即使我使用.net Framework 4.5,它允许我分配超过2GB,我仍然不想使用数组对象
  3. 我需要类似GlobalHAlloc的内容,但此方法只有32位大小参数
  4. 我应该使用Windows API吗?我知道这很难做到,我知道我会泄漏很多记忆,因为我没有这方面的技能......

    但.NET framework 4.5中是否有类似GlobalHAlloc的内容,这让我可以轻松地分配内存?我想做自己的类MemoryBlock,因为我不喜欢数组类。

1 个答案:

答案 0 :(得分:6)

您可以使用多种方法来获取更大的内存块。

  • AllocHGlobal实际上需要一个IntPtr,这是一个64位大小的64位值。
  • 调用本机函数HeapAlloc。同样,它需要一个指针大小的参数。
  • 调用本机函数CoTaskMemAlloc function,该函数也采用指针大小的参数。

由于您声明AllocHGlobal仅采用32位参数,因此您的进程似乎是32位。这才是真正的问题。在32位进程中,您不能分配超过4GB(总计)。而这个限制是由指针的大小强加的。作为进一步限制,在32位操作系统中,进程不能分配超过2GB(总计)。

所以,我建议您需要切换到64位进程来解决问题。