AllocHGlobal可以分配更多的2GB内存吗?

时间:2009-08-21 01:56:49

标签: vb.net 64-bit memory-management

我已经使用Win32 API调用VirtualAlloc / VirtualFree来分配和释放大小超过2GB的内存块。

我应该可以使用System.Runtime.InteropServices.Marshal类中的AllocHGlobal函数来执行相同的操作。

但是,下面的代码给出了算术溢出异常(注意显式转换为long,应该实例为64位指针)。


Dim p As IntPtr = System.Runtime.InteropServices.Marshal.AllocHGlobal(New IntPtr(CLng(3221225472)))
System.Runtime.InteropServices.Marshal.FreeHGlobal(p)

所以我的问题是,我可以使用AllocHGlobal分配超过2GB的内存吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:0)

ArithmeticOverflowException发生在IntPtr构造函数中,而不是在AllocHGlobal的调用中。您不需要Long来保存该值,因此请尝试以下方法:

Marshal.AllocHGlobal(New IntPtr(&HC0000000I))
相关问题