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);

Antworten auf die Frage(12)

Ihre Antwort auf die Frage