【问题标题】:Can AllocHGlobal allocate more the 2GB of memory?AllocHGlobal 可以分配更多的 2GB 内存吗?
【发布时间】:2009-08-21 01:56:49
【问题描述】:

我使用 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 的内存吗?如果有,怎么做?

【问题讨论】:

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


    【解决方案1】:

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

    Marshal.AllocHGlobal(New IntPtr(&HC0000000I))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 2018-12-23
      • 2012-03-28
      • 1970-01-01
      相关资源
      最近更新 更多