Я прибегнул к использованию 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 ГБ памяти? Если да, то как?