/STACK (Выделение стека)
Параметр /STACK компоновщика задает размер стека в байтах. Этот параметр используется только при сборке .exe файла. Параметр /STACK игнорируется при применении к .dll файлам.
Значение reserve указывает общее выделение стека в виртуальной памяти. Для компьютеров ARM64, x86 и x64 размер стека по умолчанию составляет 1 МБ.
Значение commit подлежит интерпретации операционной системой. В WindowsRT он указывает объем физической памяти, выделяемой за раз. Зафиксированная виртуальная память приводит к зарезервированию места в файле разбиения на страницы. Более commit высокое значение экономит время, когда приложению требуется больше места в стеке, но увеличивает требования к памяти и, возможно, время запуска. Для компьютеров ARM64, x86 и x64 значение по умолчанию commit равно 4 КБ.
reserve Укажите и commit значения в десятичной или шестнадцатеричной нотации языка C (используйте 0x префикс).
Другим способом задать размер стека является STACKSIZE оператор в файле определения модуля ( .def ). STACKSIZE Переопределяет параметр выделения стека ( /STACK ) при указании обоих. Размер стека можно изменить после .exe создания файла с помощью EDITBIN средства.
Задание данного параметра компоновщика в среде разработки Visual Studio
- Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
- Перейдите на страницу свойств Свойства конфигурации>Компоновщик>Система.
- Измените одно из следующих свойств:
- Размер фиксации стека
- Размер резерва стека
Задание данного параметра компоновщика программным способом
- См. описание свойств StackCommitSize и StackReserveSize.
/F (Задать размер стека)
Без этого параметра размер стека по умолчанию по умолчанию — 1 МБ. Аргумент number может находиться в десятичной или C-языковой нотации. Аргумент может варьироваться от 1 до максимального размера стека, принятого компоновщиком. Компоновщик округляет указанное значение до ближайшего кратного 4 байта. Пространство между /F и number является необязательным.
Возможно, потребуется увеличить размер стека, если программа получает сообщения стека переполнения во время выполнения.
Вы также можете задать размер стека следующими способами:
- /STACK Использование параметра компоновщика. Дополнительные сведения см. в разделе /STACK (Выделение стека).
- Использование EDI ТБ IN в ФАЙЛЕ EXE. Дополнительные сведения см. в справочнике по EDI ТБ IN.
Установка данного параметра компилятора в среде разработки Visual Studio
- Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
- Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.
- Введите параметр компилятора в поле «Дополнительные параметры «.
Установка данного параметра компилятора программным способом
- См. раздел AdditionalOptions.
Приложение C#, WPF, .NET 6: Как увеличить размер стека [закрыт]
Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример.
Закрыт 8 месяцев назад .
Сообщество рассмотрело необходимость повторного открытия этого вопроса 8 месяцев назад и оставило его закрытым:
Исходные причины закрытия не были исправлены
Я разрабатываю игру на WPF. Но как запускаю приложение, оно зависает и новая оперативная память не выделяется. Я использую .NET 6 и WPF. Я думаю в приложении .NET не хватает памяти стека. Вопрос в том, как програмно управлять Доменом приложения в CLR, чтобы увеличить его стек?
Отслеживать
DmitriySidyakin
задан 3 мая 2023 в 3:20
DmitriySidyakin DmitriySidyakin
184 7 7 бронзовых знаков
Крайне маловероятно, что зависает из-за размера кучи, ибо ограничения на размер кучи просто не существует. Ищите причину в чем то другом, попробуйте остановить программу под отладчиком в момент зависания и посмотрите, какие потоки висят на каком вызове.
3 мая 2023 в 5:06
+ Вопросы с отладкой кода в репозитории запрещены. Код должен быть минимальным, и его нужно включать в сам вопрос: ru.stackoverflow.com/help/minimal-reproducible-example
3 мая 2023 в 5:07
У вас ошибки в алгоритме (например, не обязательно использовать рекурсию) и в реализации (например, большой объем переменных в рекурсивной процедуре). Про размер кучи забудьте, дело не в этом.
3 мая 2023 в 6:35
Хороший способ на практике увидеть максимальный размер кучи, это в цикле выделять новые массивы (вроде list.Add(new byte[1000]); ). Профилировщиком посмотреть память процесса, почти наверняка она будет расти, пока не исчерпается доступная ОЗУ на машине.
3 мая 2023 в 6:40
Если вы уперлись в стандартный размер стека, значит что-то пошло не так. Любая рекурсия может быть оптимизирована либо с использованием обычного стека Stack
3 мая 2023 в 7:05
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Для увеличения стека мне помогло:
Самый простой способ установить размер стека начиная с .NET 2.0 и Win XP — создать новый поток с желаемым размером стека:
using System.Threading; Thread T = new Thread(threadDelegate, stackSizeInBytes); T.Start();
Чтобы изменить размер стека всей программы, вам придется использовать editbin:
EDITBIN.EXE /STACK: file.exe
Это помогло мне, программа больше не зависает, только долго работает.
Отслеживать
ответ дан 3 мая 2023 в 6:28
DmitriySidyakin DmitriySidyakin
184 7 7 бронзовых знаков
При использовании чужих ответов нужно указывать ссылку на источник (я добавил правкой)
3 мая 2023 в 6:34
Спасибо, да по ГК нужно указвать источник заимствования.
3 мая 2023 в 6:48
только долго работает — ваш код безобразно работает с ресурсами и создает тонны мусора. Нужно профилировать и отлаживать, а не стек увеличивать.
3 мая 2023 в 7:11
@aepot Ну уж такой алгоритм и процессор. Я писал код из обобщений, т.к. алгоритмы мне показались интересными. Я писал ИИ, поэтому так долго работает. Если писать хардкод шахматных ходов, то работать будет быстрее.
3 мая 2023 в 7:58
@DmitriySidyakin написано очень неоптимально, это можно ускорить в разы. Начните с того. что нужно убрать GC.Collect(); , это тормозит код.
3 мая 2023 в 9:52
В C# объём памяти выделенный под кучу динамический расширяется при необходимости в автоматическом режиме. Впрочем, память под процесс даёт система, так что если и увеличивать количество памяти — то увеличивать количество памяти со стороны системы (для процесса), а не со стороны кода приложения. Ну а вообще зависание приложения — это нетипичное поведение при нехватке памяти, так что рекомендую используя отладчик узнать где конкретно программа зависает, ну или профилировщик памяти (например dotMemory).
Как увеличить размер стека visual studio
CheaterExposer → [UPDATE] Codeforces Cheater IOI Medalist
sarthak1357 → CSES shortest routes 1
standoff → Еhis isn’t fair.
MikeMirzayanov → Codeforces Single Account Policy: zh0ukangyang is Removed from the Rating
maomao90 → Editorial for Hello 2024
mohammed_orkhan → I wnat to be EXPERT!!
maomao90 → I am top 1 contributor. AMA!
![]()
Pyqe → Codeforces Round #831 (Div. 1 + Div. 2, based on COMPFEST 14 Final) Editorial
![]()
arham_doshi → cses graph session editorial(incomplete)
SAD_IN_NIGHTMARE → 2024 OIs
parth_1818 → Know Some Sorting Techniques
stefdasca → Easy and Quick Video Tutorials for the CSES Problem Set
I_am_Polish_Girl → Dijkstra Algorithgm
atcoder_official → AtCoder Beginner Contest 335 (Sponsored by Mynavi) Announcement
awoo → Разбор Educational Codeforces Round 149
Vectrizz → Золотой расчет: оптимизация ценности в рюкзаке с умением раздробить слитки!
Hexagons → [OFF TOPIC] Hollow Knight radiant tutorial for bossfight «Markoth»
pajenegod → The Ultimate Reroot Template
triumphh → What rating on codeforces should I aim for to crack ZCO and INOI?
![]()
sahal → CSES Problemset Editorials (almost all section editorial collection)
![]()
Zlobober → Checkers with testlib.h
oversolver → Expert for the first time since 2011, AMA
Algorithms_with_Shayan → How to approach DP problems & DP playlist
Nurali16 → tourist is not noob . he is genius
![]()
AminAnvari → Segment Tree Problems