Может ли кто-нибудь сказать мне, что такое емкость стека на C#.Емкость стека в C#
Я пытаюсь создать закрытый объект 3D-сетки, используя массив из 30 000 предметов.
Может ли кто-нибудь сказать мне, что такое емкость стека на C#.Емкость стека в C#
Я пытаюсь создать закрытый объект 3D-сетки, используя массив из 30 000 предметов.
Размер стека по умолчанию для приложения .NET составляет 1 МБ (по умолчанию 256 КБ для 32-разрядных приложений ASP.NET и 512 КБ для 64-разрядных приложений ASP.NET), но вы можете это изменить. Для приложения вы можете изменить размер по умолчанию, изменив заголовок PE исполняемого файла. Для создаваемых потоков вы можете использовать перегрузку конструктора, которая принимает размер стека.
Но, как указывает Антон Тайджи, в его ответах массивы являются ссылочными типами и, следовательно, расположены на куче (даже если массив содержит кучу типов значений).
Размер 256 KB для приложений ASP.Net предназначен для 32-разрядных приложений. В 64-разрядной версии Windows Server 2008 и выше размер стека был увеличен до 512 КБ. См. KB 932909 для получения дополнительной информации. – Dono
@Dono Спасибо за информацию. Я обновлю. –
@BrianRasmussen Фактически вы можете выделить массив в стеке с помощью 'stackalloc'. Кроме того, только потому, что что-то является ссылочным типом, необязательно означает, что он будет выделен в стеке или куче, он зависит от реализации CLR и в реализации .NET, он варьируется в нескольких особых случаях (размер типа и объем). –
Размер стека настраивается и can be set in several different ways.
Ваш массив будет жить на куче, размер стека не имеет значения в вашем случае.
Нет, если вы объявите его с помощью stackalloc ... – Nuzzolilo
Чтобы использовать стек для хранения массива, вы должны использовать небезопасный код с указателями и stackalloc для выделения необходимого пространства памяти в стеке.
Если вы хотите проверить значение для вашей текущей сборки .Net, вы можете сделать это, используя команду ILDASM
, входящую в командную строку Visual Studio. После того, как вы запустили инструмент, откройте сборку, а затем перейдите в меню View -> Headers
. Теперь прокрутите вниз до PE Optional Header (32 bit)
раздел в только что открывшемся окне Headers
. Вы увидите два поля:
Упомянутый пространство резервируется в файл подкачки операционной системы так стек всегда может быть выгружена при необходимости ,
Вы можете просто проверить его самостоятельно, поставив триллионы элементов на ней и видеть, когда он выходит из строя? – Smashery
Близкий вопрос: [Размер стека в Mono] (http://stackoverflow.com/questions/19817790/stack-size-under-mono). – Palec