Емкость стека в С#

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

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

Ответ 1

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

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

Ответ 2

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

Ответ 4

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

Ответ 5

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

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

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

введите описание изображения здесь