Недавно я проводил обширное профилирование по ограничениям памяти в .NET для 32-битного процесса. Нас всех закидывает идея, что мы можем выделить до 2,4 ГБ (2 ^ 31) в приложении .NET, но, к сожалению, это не так :(. Процесс приложения имеет так много места для использования, а операционная система делает большие Тем не менее, для нашей работы по управлению ею у нас .NET, похоже, есть свои собственные издержки, которые составляют примерно 600-800 МБ для типичных реальных приложений, которые увеличивают ограничение памяти. Это означает, что как только вы выделяете массив целых чисел, который занимает 1,4 ГБ, следует ожидать появления исключения OutOfMemoryException ().
Очевидно, что в 64-битной версии это ограничение наступает гораздо позже (давайте поговорим через 5 лет :)), но общий размер всего в памяти также увеличивается (я нахожу, что это ~ 1,7-2 раза) из-за увеличенного размера слова .
Что я точно знаю, так это то, что идея виртуальной памяти из операционной системы определенно НЕ дает вам практически бесконечное пространство для выделения в одном процессе. Только в этом случае все 2,4 ГБ памяти можно адресовать всем (многим) приложениям, работающим одновременно.