Может ли AllocHGlobal выделить больше 2 ГБ памяти? - PullRequest
0 голосов
/ 21 августа 2009

Я прибегнул к использованию Win32 API-вызовов VirtualAlloc / VirtualFree для выделения и освобождения блоков памяти размером более 2 ГБ.

Я должен иметь возможность использовать функцию AllocHGlobal из класса System.Runtime.InteropServices.Marshal, чтобы сделать то же самое.

Однако следующий код дает исключение арифметического переполнения (обратите внимание на явное приведение к long, которое должно создавать 64-битный указатель).


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

Итак, мой вопрос: могу ли я использовать AllocHGlobal для выделения более 2 ГБ памяти? Если да, то как?

1 Ответ

0 голосов
/ 31 августа 2009

ArithmeticOverflowException происходит в конструкторе IntPtr, а не в вызове AllocHGlobal. Вам не нужно Long для хранения этого значения, поэтому попробуйте вместо этого:

Marshal.AllocHGlobal(New IntPtr(&HC0000000I))
...