'System.OutOfMemoryException' foi lançado quando ainda há bastante memória livre

Este é o meu código:

int size = 100000000;
double sizeInMegabytes = (size * 8.0) / 1024.0 / 1024.0; //762 mb
double[] randomNumbers = new double[size];

Exceção: exceção do tipo 'System.OutOfMemoryException' foi lançada.

Eu tenho 4GB de memória nesta máquina 2.5GB é grátis quando eu começo esta corrida, há claramente espaço suficiente no PC para lidar com os 767mb de 100000000 números aleatórios. Eu preciso armazenar tantos números aleatórios quanto possível, dada a memória disponível. Quando vou para a produção, tenho 12 GB na caixa e quero usá-la.

O CLR me restringe a uma memória máxima padrão para começar? e como peço mais?

Atualizar

Eu pensei em dividir isso em partes menores e adicionar incrementalmente aos meus requisitos de memória ajudaria se o problema fossefragmentação de memória, mas isso nãoEu não consigo passar de um tamanho total de 256mb da ArrayList, independentemente do que eu faço para ajustar o blockSize.

private static IRandomGenerator rnd = new MersenneTwister();
private static IDistribution dist = new DiscreteNormalDistribution(1048576);
private static List<double> ndRandomNumbers = new List<double>();

private static void AddNDRandomNumbers(int numberOfRandomNumbers) {
    for (int i = 0; i < numberOfRandomNumbers; i++) {
      ndRandomNumbers.Add(dist.ICDF(rnd.nextUniform()));                
  }
}

Do meu método principal:

int blockSize = 1000000;

while (true) {
  try
  {
    AddNDRandomNumbers(blockSize);                    
  }
  catch (System.OutOfMemoryException ex)
  {
    break;
  }
}            
double arrayTotalSizeInMegabytes = (ndRandomNumbers.Count * 8.0) / 1024.0 / 1024.0;