Visual Studio — Увеличение размера стека в переполнении стека
Я задавал этот вопрос пару дней назад, но он не решил мою проблему. Я не могу увеличить размер стека в Visual Studio, я использую рекурсивный метод, который получает высокий ввод и вызывает переполнение стека. Я не могу использовать вектор или что-то еще. Что мне нужно, это увеличить размер стека в C ++, Visual Studio.
Постскриптум Я увеличил размер резервного стека из конфигурации Visual Studio, однако это также не решает мою проблему.
И моя основная функция.
Решение
Я решил проблему, она должна работать во всех IDE, я думаю, но она определенно работает в Visual Studio. ПРОЕКТ-> Свойства-> Свойства конфигурации-> Линкер-> Система-> Резервный размер стека = 4194304. Это делает размер стека 4 МБ.
Как увеличить стек в c
U m_nik → Pro Tips — get them while they are free
sahal → ICPC Dhaka Regional and Preliminary Problemset and Editorials
chokudai → AtCoder Beginner Contest 293 Announcement
AAK → Indian ICPC 2022-23 Regionals — Discussion
vito1036 → Croatian Open Competition in Informatics (COCI) 2022/2023 — Round #5
Hustle_Loyalty_Respect → ABC Rotate and Palindrome — TLE even with caching states
Radan → [Off Topic] — Ask Me Anything
GlebsHP → Nebius Welcome Round (Div. 1 + Div. 2, rated, t-shirts!)
nor → User editorial for Codeforces Round 513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2)
yh11 → Need help/tutor for preparing for big coding competitions
Xaxixin → A message to tourist and Endagorion
CodeRazer → Memoization doesn't seem to work here [IOI '00 P1 — Palindrome] on DMOJ.
srijan_2002 → CodeCracker 7.0 , Aarohan 2023
ombiradar04 → The solving Paradox
Qumeric → Is search on Codeforces broken?
appu_nitd → Invitation to Decathlon 2023
m aroonrk → AtCoder Regular Contest 158 Announcement
chenye3N → How Can I Persuade My Mother to Join Codeforces Contest?
Misaqwwe_ → Вопросы насчет ученика
Kamranali → In this problem can anybody please explain optimal strategy of Alice and Bob with poof?
awoo → Разбор Educational Codeforces Round 144
edogawa_something → Hosting a practice group
HackerearthAdmin → HackerEarth March Easy Postponed to 11th March
shivanshsingh9670 → Why map works fine but unordered_map throws TLE
MateoCV → Codeforces Round 856 (Div. 2) Editorial
Блог пользователя Brayna
Автор Brayna, 11 лет назад ,
Подскажите как увеличить объем стека в Dev-C++. На сколько я знаю это делается с помощью
#pragma comment(linker, "/STACK:66777216"), но у меня он не увеличивается
код
если выполнить код то выведет до 130199
если закометировать #pragma comment(linker, "/STACK:66777216"), то выведет тоже до 130199
Подскажите в чем проблема
dev-c++, стек
Комментарии (12)


g++.exe abc.cpp -O2 -s -static
Учитывая, что в 2011 году официальная проверка Всеукра была вообще под Линуксом, ссылка на документ 2010 года выглядит совершенно не актуальной.
Что-то я не наблюдаю на КодеФорсесе лично reiten-а, который наиболее точно знает все технические параметры официальной проверки Всеукра—2011, но некоторые другие товарищи, имевшие там судейские логины, в данном сообществе присутствуют (это толстый намёк им с просьбой отозваться 😉 и рассказать именно конкретно о данном вопросе именно конкретно на Всеукре).
Увеличение размера стека (Си, Си++)

статьи
Вчера я написал программу, в которой реализовал алгоритм сортировки методом Хоара (быстрая сортировка). Сам алгоритм я сейчас описывать не буду (кому интересно, ссылка на Википедию). Скажу только одно, что в этом алгоритме используется рекурсия. К чему я веду? К тому, что при тестировании сортировки массива, размер которого достаточно велик (порядком 30 тысяч элементов), программа зависала в связи с тем, что не хватало памяти в стеке. В результате этого я получал такое уведомление:

Мне нужно было сделать тесты этой сортировки на еще более больших массивах (100 тысяч элементов), поэтому я стал искать выход из сложившейся ситуации, а именно способ по увеличению размера стека. Спустя некоторое время, решение было найдено.
В самом начале программы (я писал после подключения всех заголовочных файлов) необходимо вписать следующую строку:
Данной строкой мы сообщаем компоновщику, что хотим изменить размер стека. Число после слова STACK выбирайте по своему усмотрению. Однако не следует ставить слишком маленькое или большое значение. При указании большого значения, у меня программа просто не выполнялась, но все-таки запускалась.

А вот когда я поставил вообще запредельное значение (в числе было более двадцати нулей), то она перестала даже компилироваться.
Увеличение размера стека (Си, Си++)
Вчера я написал программу, в которой реализовал алгоритм сортировки методом Хоара (быстрая сортировка). Сам алгоритм я сейчас описывать не буду (кому интересно, ссылка на Википедию). Скажу только одно, что в этом алгоритме используется рекурсия. К чему я веду? К тому, что при тестировании сортировки массива, размер которого достаточно велик (порядком 30 тысяч элементов), программа зависала в связи с тем, что не хватало памяти в стеке. В результате этого я получал такое уведомление:

Мне нужно было сделать тесты этой сортировки на еще более больших массивах (100 тысяч элементов), поэтому я стал искать выход из сложившейся ситуации, а именно способ по увеличению размера стека. Спустя некоторое время, решение было найдено.
В самом начале программы (я писал после подключения всех заголовочных файлов) необходимо вписать следующую строку:
Данной строкой мы сообщаем компоновщику, что хотим изменить размер стека. Число после слова STACK выбирайте по своему усмотрению. Однако не следует ставить слишком маленькое или большое значение. При указании большого значения, у меня программа просто не выполнялась, но все-таки запускалась.

А вот когда я поставил вообще запредельное значение (в числе было более двадцати нулей), то она перестала даже компилироваться.
Как увеличить максимальную память, выделенную на стек / кучу
Как увеличить максимальную память, выделенную для стека/кучи для программы на С++?
Увеличивает ли оперативная память вашего компьютера автоматическое увеличение памяти стека/кучи компьютерной программы?
5 ответов
В Visual С++ вы можете использовать директиву #pragma . Например:
Вы можете указать размер зарезервированной кучи и размер стека с параметрами link/Heap и /Stack в Visual Studio. Подробнее см. В следующих статьях MSDN:
- Распределение кучи
- Распределение стека
Второе редактирование: я вижу из вашего комментария, что вы работаете в Windows, поэтому мой ответ Unix ниже не будет очень полезен для вас. Но см. Определение пространства стека с помощью Visual Studio и максимальный размер стека для C/С++.
Размер stack довольно ограничен в Linux. Команда ulimit -s даст текущее значение в килобайтах. Вы можете изменить значение по умолчанию (обычно) в файле /etc/security/limits.conf.
Вы также можете, в зависимости от привилегий, изменить его на основе каждого процесса с помощью setrlimit() . См. Например мой ответ в Ошибка сегментации: выделение стека в программе на языке C в Ubuntu, когда bufffer > 4M.
Для кучи см., например, ограничение размера кучи в C. Но я не думаю, что вы можете увеличить или уменьшить максимальный размер.
Размер кучи процесса обычно ограничен максимальной памятью, которую может выделить процесс. Куча не должна быть смежной (если вы не делаете что-то вроде malloc (1000000000)), поэтому куча может использовать большую часть доступного адресного пространства.
В Windows максимальный размер процесса зависит от нескольких факторов.
Используя 32-разрядную Windows, 32-разрядный процесс может по умолчанию выделять 2 ГБ. Если Windows загружается с помощью переключателя /3GB, и процесс компилируется с использованием флага компоновщика «Разрешить большие адреса», тогда процесс может выделить 3 ГБ.
Используя 64-битную Windows, 32-разрядный процесс по умолчанию может выделять 2 ГБ. Если процесс связан с «Разрешить большие адреса», то 64-разрядная версия Windows позволяет 32-битовому процессу выделять 4 ГБ.
64-разрядный процесс (в 64-разрядной Windows) может выделить примерно 16 000 ГБ.