Cómo asignar más de MaxInteger bytes de memoria en C #

Deseo asignar más de MaxInteger bytes de memoria.

Marshall.AllocHGlobal () espera un número entero, por lo que no puedo usar esto. ¿Hay otra manera?

Actualizar

Cambié la plataforma a x64, y luego ejecuté el código a continuación.

myp parece tener la longitud correcta: aproximadamente 3.0G. Pero obstinadamente el "buffer" alcanza un máximo de 2.1G.

¿Alguna idea de por qué?

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

Respuestas a la pregunta(6)

Su respuesta a la pregunta