Емкость стека в C # - PullRequest
49 голосов
/ 05 мая 2009

Может кто-нибудь сказать мне, какова емкость стека в C #.

Я пытаюсь создать замкнутый объект 3D-сетки, используя массив из 30 000 элементов.

Ответы [ 5 ]

71 голосов
/ 05 мая 2009

Размер стека по умолчанию для приложения .NET составляет 1 МБ (по умолчанию 256 КБ для 32-разрядных приложений ASP.NET и 512 КБ для 64-разрядных приложений ASP.NET), но вы можете изменить это. Для приложения вы можете изменить размер по умолчанию, изменив PE-заголовок исполняемого файла. Для потоков, которые вы создаете, вы можете использовать перегрузку конструктора, которая принимает размер стека.

Но, как указывает в своем ответе Антон Тийхий, ​​массивы являются ссылочными типами и, таким образом, расположены в куче (даже если массив содержит кучу типов значений).

53 голосов
/ 05 мая 2009

Ваш массив будет жить в куче, размер стека не имеет значения в вашем случае.

29 голосов
/ 05 мая 2009
5 голосов
/ 06 февраля 2017

Если вы хотите проверить значение для вашей текущей сборки .NET, то вы можете сделать это с помощью команды ILDASM, входящей в командную строку Visual Studio. После запуска инструмента откройте сборку и перейдите в меню View -> Headers. Теперь прокрутите вниз до раздела PE Optional Header (32 bit) во вновь открытом окне Headers. Вы увидите два поля:

  1. Размер стека резервируется - это не требует пояснений. Это размер стековой памяти по умолчанию, выделяемый любому потоку, созданному в вашей программе / приложении.
  2. Размер фиксации стека - зафиксированное пространство стека - - (Цитата Ханса Пассанта из здесь )

Указанное пространство зарезервировано в файле подкачки операционной системы, поэтому стек всегда можно поменять местами при необходимости.

enter image description here

5 голосов
/ 21 июня 2009

Чтобы использовать стек для хранения массива, вы должны использовать небезопасный код с указателями и stackalloc для выделения требуемой памяти в стеке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...