Может ли кто-нибудь сказать мне, что такое емкость стека на С#.
Я пытаюсь создать закрытый объект 3D-сетки, используя массив из 30 000 элементов.
Может ли кто-нибудь сказать мне, что такое емкость стека на С#.
Я пытаюсь создать закрытый объект 3D-сетки, используя массив из 30 000 элементов.
Размер стека по умолчанию для приложения .NET составляет 1 МБ (по умолчанию 256 КБ для 32-разрядных приложений ASP.NET и 512 КБ для 64-разрядных приложений ASP.NET), но вы можете это изменить. Для приложения вы можете изменить размер по умолчанию, изменив заголовок PE исполняемого файла. Для создаваемых потоков вы можете использовать перегрузку конструктора, которая принимает размер стека.
Но, как указывает Антон Тайджы в своем ответе, массивы являются ссылочными типами и, следовательно, расположены в куче (даже если массив имеет кучу типов значений).
Ваш массив будет жить в куче, размер стека не имеет значения в вашем случае.
Размер стека настраивается и может быть установлен несколькими способами.
Чтобы использовать стек для хранения массива, вы должны использовать небезопасный код с указателями и stackalloc для выделения необходимого пространства памяти в стеке.
Если вы хотите проверить значение для текущей сборки .Net, вы можете сделать это, используя команду ILDASM
, входящую в командную строку Visual Studio. После запуска инструмента откройте сборку и перейдите в меню View -> Headers
. Теперь прокрутите вниз до раздела PE Optional Header (32 bit)
в только что открытом окне Headers
. Вы увидите два поля:
Указанное пространство зарезервировано в файле подкачки операционной системы, поэтому при необходимости стека всегда можно поменять.