Физическая память влияет только на производительность программ, запущенных на машине, но не имеет никакого отношения к какой-либо проблеме, связанной с памятью программы (в стандартных операционных системах встроенная система следует другим правилам).
Прежде всего, поскольку я много раз видел эту ошибку, давайте поговорим о модели памяти операционной системы.
Почти каждая пользовательская операционная система (я думаю, здесь, на Linux, Windows, BSD и т. Д.) Использует модель виртуальной памяти. Модель виртуальной памяти означает, что каждой программе предоставляется полный доступ к частной виртуальной памяти, то есть представление памяти, которая не должна иметь соответствующую физическую память.
Размер этой виртуальной памяти равен диапазону, к которому может обращаться один регистр компьютера. В 32-разрядных операционных системах это означает около 4 ГБ. Теперь, независимо от того, сколько фактической памяти имеет ваша система, ваша программа всегда будет думать, что он имеет 4 ГБ.
Теперь эти 4 ГБ фактически распределяются между вашей программой и пространством, которое операционная система резервирует для обработки данных в режиме ядра, а также для поддержки структур, необходимых вашей программе. Практически вы можете рассчитывать примерно на 2 или 3 ГБ в зависимости от вашей конфигурации (конфигурации вашей ОС). Все это не имеет никакого отношения к объему физической памяти, который у вас есть, вы можете иметь 256 МБ ОЗУ, но ваша программа будет считать, что в его распоряжении 2 ГБ.
Когда вы выделяете память, система обычно не предоставляет именно тот объем памяти, который вы запрашиваете. Вместо этого он использует страницы, которые представляют собой блоки зарезервированной памяти (например, 4 КБ), назначенные вашему процессу. Когда вы делаете это, ОС регистрирует эту «страницу» как выделенную, но она все еще находится в виртуальной памяти. Внутренне ОС управляет тем, какие из этих страниц хранятся в физической памяти, а какие находятся в разделе подкачки (на жестком диске). По этой причине увеличение оперативной памяти повышает производительность (больше страниц может находиться в основной памяти одновременно, и вам приходится меньше читать с жесткого диска), но не поможет с переполнением стека (или исключением из-за нехватки памяти кстати).
И это , почему увеличение вашей оперативной памяти не поможет.
Наконец, об исключении переполнения стека ... ну, трудно увидеть, не увидев реальный код, некоторые хорошие ответы уже были даны.
В основном переполнение стека происходит из-за бесконечной рекурсии, прямой или косвенной (A -> B -> C -> A), но в вашем конкретном случае я бы сказал, что вы просто выделяете много данных в стек.
У вас есть массив размером 70000. Я предполагаю, что массив полон типов значений, которые расположены в стеке, который, если я правильно помню (и, пожалуйста, не принимайте это как факт), составляет 1 МБ в .NET, что может быть причиной того, что вы получаете переполнение вашего стека.