Wie mehr als MaxInteger Bytes Speicher in C # @ zugewiesen werd
Ich möchte mehr als MaxInteger Bytes Speicher zuweisen.
Marshall.AllocHGlobal () erwartet eine Ganzzahl - daher kann ich diese nicht verwenden. Gibt es eine andere Möglichkeit
Aktualisiere
Ich habe die Plattform auf x64 geändert und dann den folgenden Code ausgeführt.
myp scheint die richtige Länge zu haben: ungefähr 3.0G. Aber hartnäckig "Puffer" bei 2,1 G maximal.
Eine Idee warum?
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);