Как выделить больше, чем MaxInteger байтов памяти в C #
Я хочу выделить больше, чем MaxInteger байтов памяти.
Marshall.AllocHGlobal () ожидает целое число - поэтому я не могу использовать это. Есть ли другой способ?
Обновить
Я изменил платформу на x64, а затем запустил код ниже.
myp, кажется, имеет правильную длину: около 3.0G. Но упорно «буфер» исчерпан на 2.1g.
Есть идеи почему?
var fileStream = new FileStream(
"C:\\big.BC2",
FileMode.Open,
FileAccess.Read,
FileShare.Read,
16 * 1024,
FileOptions.SequentialScan);
Int64 length = fileStream.Length;
Console.WriteLine(length);
Console.WriteLine(Int64.MaxValue);
IntPtr myp = new IntPtr(length);
//IntPtr buffer = Marshal.AllocHGlobal(myp);
IntPtr buffer = VirtualAllocEx(
Process.GetCurrentProcess().Handle,
IntPtr.Zero,
new IntPtr(length),
AllocationType.Commit | AllocationType.Reserve,
MemoryProtection.ReadWrite);
unsafe
{
byte* pBytes = (byte*)myp.ToPointer();
var memoryStream = new UnmanagedMemoryStream(pBytes, (long)length, (long)length, FileAccess.ReadWrite);
fileStream.CopyTo(memoryStream);