2GB +内存分配

apo*_*pse -5 c# memory

我需要在一个部件中分配超过2GB的内存.

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

我应该使用Windows API吗?我知道这很难做到,我知道我会泄漏很多记忆,因为我没有这方面的技能......

但有没有类似于GlobalHAlloc.NET framework 4.5的东西让我轻松分配内存?我想做自己的类MemoryBlock,因为我不喜欢数组类.

Dav*_*nan 6

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

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

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

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

  • 一旦你分配它,我不确定你将用这个缓冲区做什么.`UnmanagedMemoryStream`确实看起来不错.你有64位操作系统的事实不是关键因素.你的过程是64位吗?或者它的目标是x86? (2认同)