我已经使用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的内存吗?如果是这样,怎么样?
答案 0 :(得分:0)
ArithmeticOverflowException
发生在IntPtr
构造函数中,而不是在AllocHGlobal
的调用中。您不需要Long
来保存该值,因此请尝试以下方法:
Marshal.AllocHGlobal(New IntPtr(&HC0000000I))