Это не вариант в среде CLR. Память управляется очень иначе, в .NET-процессе есть как минимум 10 различных куч. Программа .NET может использовать все пространство виртуальной памяти, доступное в процессе Windows, без ограничений.
Самый простой способ - просто выделить память при запуске программы. Вы должны быть немного осторожны, вы не можете проглотить слишком много за один глоток, адресное пространство фрагментировано из-за него, содержащего сочетание кода и данных по разным адресам. Память выделяется из промежутков между ними. Чтобы помещать серьезную вмятину в доступное адресное пространство, вам нужно выделить не менее гигабайта, и это невозможно с одним распределением.
Так просто использовать цикл, чтобы выделить более мелкие куски, скажем, один мегабайт в то время:
private static List<byte[]> Gobble = new List<byte[]>();
static void Main(string[] args) {
for (int megabyte = 0; megabyte < 1024; megabyte++)
Gobble.Add(new byte[1024 * 1024]);
// etc..
}
Обратите внимание, что это очень быстро, распределенный адресное пространство только зарезервирован и не занимает какой-либо ОЗУ.
Я не пишу ответа, потому что это не то, что мне приходилось делать раньше, но первым моим инстинктом было бы развернуть виртуальную машину и ограничить объем памяти, который у нее есть; таким образом, вы учитываете такие вещи, как ОС и другие приложения, которые должны быть запущены, а также ваши собственные. –