-4

我需要在一块中分配超过 2GB 的内存。

  1. 我不能使用数组,因为有 2GB 限制
  2. 即使我使用允许我分配超过 2GB 的 .net Framework 4.5,我仍然不想使用数组对象
  3. 我需要类似的东西GlobalHAlloc,但这种方法只有 32 位大小的参数

我应该使用 Windows API 还是什么?我知道这很难做到,而且我知道我会泄漏很多内存,因为我没有这样做的技能......

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

4

1 回答 1

6

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

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

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

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

于 2012-11-14T17:25:19.987 回答