Перейти к содержимому

Как увеличить размер стека visual studio

  • автор:

/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

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
  2. Перейдите на страницу свойств Свойства конфигурации>Компоновщик>Система.
  3. Измените одно из следующих свойств:
    • Размер фиксации стека
    • Размер резерва стека

Задание данного параметра компоновщика программным способом

  1. См. описание свойств StackCommitSize и StackReserveSize.

/F (Задать размер стека)

Без этого параметра размер стека по умолчанию по умолчанию — 1 МБ. Аргумент number может находиться в десятичной или C-языковой нотации. Аргумент может варьироваться от 1 до максимального размера стека, принятого компоновщиком. Компоновщик округляет указанное значение до ближайшего кратного 4 байта. Пространство между /F и number является необязательным.

Возможно, потребуется увеличить размер стека, если программа получает сообщения стека переполнения во время выполнения.

Вы также можете задать размер стека следующими способами:

  • /STACK Использование параметра компоновщика. Дополнительные сведения см. в разделе /STACK (Выделение стека).
  • Использование EDI ТБ IN в ФАЙЛЕ EXE. Дополнительные сведения см. в справочнике по EDI ТБ IN.

Установка данного параметра компилятора в среде разработки Visual Studio

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
  2. Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.
  3. Введите параметр компилятора в поле «Дополнительные параметры «.

Установка данного параметра компилятора программным способом

  • См. раздел 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 , либо вообще с помощью цикла. У меня много приложений, работающих с данными, которые в процессе работы потребляют до 1 ГБ оперативы. Ничего специального для этого я не делал, оно просто работает. Проблема не в куче.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *