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

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

  • автор:

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

Imakf → Codeforces Round 906 Editorial

whynesspower → [URGENT] Codeforces need anti-scrapping

GenGenM → Andvikpro тупой

khactrung1912 → How to calculator a^b module the prime

one_autum_leaf → Find the number of rectangles of same color in a matrix

Некропост

aropan → Codeforces Beta Round #92 — Разбор

_Firdavs_Aminov_ → Dark theme Codeforces

Imakf → Codeforces Round 906 (Div. 1, Div. 2)

chenjb → Rescheduling of World Finals 22&23

Некропост

MikeMirzayanov → Часто задаваемые вопросы

Некропост

Vladithur → Разбор Codeforces Round #769

I_lOVE_ROMAN → Time Complexity Calculation

-kirito- → Invitation to TheForces #25 (5^2-Forces, TheForces-Rated, Prizes!)

purp4ever → Teams Qualified for Africa and Arab Collegiate Programming Championship — ACPC 2023 (+teens)

diskoteka → Codeforces Round #878 (Div.3) Разбор

atcoder_official → Panasonic Programming Contest 2023(AtCoder Beginner Contest 326) Announcement

wittywho → CPH causing Compilation error but code runs fine on terminal

whynesspower → Reverse check the questions: ChatGPT

stdfloat → Is CF enough for IZHO, IOI?

127.0.0.1 → Codeforces Round 907 (Div. 2)

flamestorm → Codeforces Round 871 (Div. 4) Editorial

Некропост

-arma- → SQRT decomposition for beginners

neo_30 → Maximum deletions in a string

arpit_aditya → Cherry Pickup Leetcode 741 — Why is this approach giving wrong Answer?

elshiko → Квалификационный раунд Yandex Cup 2023

Как увеличить память под стек c# visual studio

Как я понимаю, речь идет об рекурсивный алгоритмах, так как в любых других ситуациях я не вижу способа словить ошибку переполнения стека.

Так вот, любой рекурсивный алгоритм можно переписать в виде циклов, используя программный стек( Stack ) и цикл. Соответственно, переписав алгоритм вы уйдете от этой ошибки.

Отслеживать
ответ дан 6 апр 2018 в 22:11
24.8k 12 12 золотых знаков 64 64 серебряных знака 157 157 бронзовых знаков

У меня просто есть программа ,про постройку дома,там очень много переменных типа bool и циклов,по идее все правильно но когда начал добавлять еще 12 циклов и несколько десятков переменных типа bool,программа накрылась)

Увеличение стека!

У меня в программе много рекурсивных функций. Я так понял из за того, что я много раз их вызываю переполняется стек. Если долго не пользоваться программой, то всё ок.

«Cannot evaluate expression because the current thread is in a stack overflow state.»

Подскажите пожалуйста как и где увеличить стек.

Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Увеличение картинки
Пытаюсь увеличить картинку в pictureBox1 крутя trackBar1 private void trackBar1_Scroll(object.

Плавное увеличение
Добрай вечер! Как средствами WPF можно плавно увеличить размер окна(Как например при копировании в.

Увеличение массива
Змейка, постоянно увеличивается , при съедании груши, искал в интернете не знаю как задать вопрос.

увеличение массива
Доброе время суток! Пишу код, при компелировании выдаёт ошибку. .

1272 / 973 / 113
Регистрация: 12.01.2010
Сообщений: 1,971

Лучший ответ

Сообщение было отмечено как решение

Решение

Еду на велосипеде, когда врезаюсь в стену ломается велосипед
Если не врезаюсь в стену то всё ок.
Как убрать стены с моего пути?

Может стоит просто объезжать стены?)

тобишь не делать рекурсию там где она неприменима

Насколько я знаю расширить нельзя, можно оптимизировать код под рекурсию — передавать все структуры по ссылкам, вынести все лишнее из методов и сократить глубину самой рекурсии

Регистрация: 12.09.2009
Сообщений: 61

Да не знаю я как исправить. Сейчас пробовал оптимизировать код, переполнение выскакивает намного реже, но всё равно выскакивает.

Посижу ещё, может чё то получится. Просто я не понимаю из за чего это происходит

Почетный модератор

Эксперт .NET

8717 / 3669 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9

Лучший ответ

Сообщение было отмечено как решение

Решение

[JB], увеличить размер стека можно, по умолчанию он равен 4мб. Сделать это можно например с помощью CFF Explorer, там тебе нужно перейти в раздел Optional Header и найти параметр SizeOfStackCommit, он и отвечает за размер стека для приложения, с ним и экспериментируй.

Ну либо еще как вариант, сделать чисто по программистски — самому прочитать Optional Header (для этого нужно почитать о структуре Portable Executable (PE)) и изменить значение SizeOfStackCommit, но это по программистски (Лучше 1й вариант — меньше времени потратишь).

Но самый лучший вариант был предложен m0nax — пересмотри алгоритм, т.к. увеличение стека может и не помочь.

Увеличить размер стека

Здравствуйте всем! Вопрос такой: написал прогу, где используется рекурсия, при большом количестве повторений происходит переполнение стека, как увеличить стек? Visual Studio 2010, С#. (просьба не давать умных советов типа нужно оптимизировать прогу и т.д., а ответить на поставленный вопрос и если можно подробнее, т.к. я в этом деле новичок). Заранее благодарю!

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Увеличить размер стека
Как? В с++ проекте в свойствах легко менял значение, потом компилил — все работало. Щас пишу тоже.

Увеличить размер перебираемой строки
Всем привет, есть прога, которая делает перебор символов с определенной длиной в строку, есть.

Как искуственно увеличить размер программы?
Ув. гуру. Подскажите, пожалуйста, как сделать размер приложения больше по размеру? Вроде как.

Увеличить размер массива не удаляя элементы?
Приветствую, вот хотел бы просить что собственно делает array.Resize? как я понял эта функция.

90 / 91 / 51
Регистрация: 19.06.2013
Сообщений: 323

  1. Воспользуйтесь кучей вместо стека;
  2. Можно создать отдельный поток, т.к. в конструкторе присутствует свойство maxStackSize.

Регистрация: 22.04.2015
Сообщений: 6

Рекурсия закончится, я даже условие для этого специально написал, она выполняется примерно 12000 раз, потом стек переполняется. Если не трудно, опишите любой из вышеприведенных вами методов.

90 / 91 / 51
Регистрация: 19.06.2013
Сообщений: 323

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

Первым способом будет, конечно, правильнее и проще. Но это надо смотреть код. Есть возможность его показать?

911 / 815 / 332
Регистрация: 03.02.2015
Сообщений: 5,253
Записей в блоге: 9
Nextus, ника это аппаратно. Зависит от архитектуры ЭВМ.
Регистрация: 22.04.2015
Сообщений: 6

Вообщем это прога, решающая задачу о расстановке 8 ферзей на шахматной доске всеми способами, т.е. сумма в каждом направлении должна быть 1, а общая сумма матрицы 8.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
public Form1() { InitializeComponent(); } int i, j,i1,j1, n = 8,chek=0, chek1=0, a = 0, b = 0, control=0, rami=0, ramj=0,qqq=0, nom=0; int[,] mas = new int[8, 8] { { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 } }; public void obnul() { for (a = 0; a  n; a++) { for (b = 0; b  n; b++) { mas[a, b]=0; } } } public void sumcontrol() { for (a = 0; a  n; a++) { for (b = 0; b  n; b++) { control += mas[a, b]; if (mas[a, b] == 1) { rami = a; ramj = b; } } } } public void prover() { rasstanovka(); control = 0; sumcontrol(); if (control == 8) { // show(); nom++; } mas[rami, ramj] = 0; chek = rami; chek1 = ramj+1; qqq++; while (qqq  12500) { prover(); } } public void rasstanovka() { int x, y, z1, z2, ch=0,ch1=0 ; ch = chek; ch1 = chek1; for (i = ch; i  n; i++) { // ch = 0; for (j = ch1; j  n; j++) { ch1 = 0; sumx(); sumy(); sumz1(); sumz2(); x = sumx(); y = sumy(); z1 = sumz1(); z2 = sumz2(); if (x == 0 && y == 0 && z1==0 && z2==0) { mas[i, j] = 1; //if (i < n - 1)// // i++; // j = 0; // > } } } } public int sumx() { int s = 0; for(j1=0;j1n;j1++) { s += mas[i, j1]; } return s; } public int sumy() { int s1 = 0; for (i1 = 0; i1  n; i1++) { s1 += mas[i1, j]; } return s1; } public int sumz1() { int d=0,d1=0,s2=0,s3=0,k=0,k1=0,res=0; if (i  j) { k = j - i; d = n - k; j1 = k; for (i1 = 0; i1  d; i1++) { s2 += mas[i1, j1]; j1++; } } if (i >= j) { k1 = i - j; d1 = n - k1; i1 = k1; for (j1 = 0; j1  d1; j1++) { s3 += mas[i1, j1]; i1++; } } res = s2 + s3; return res; } public int sumz2() { int ipj = 0, j1=0, i1=0, s4 = 0, p = n - 1,g=0,m=0,u=0,t=0,s5=0,res1=0; ipj = i + j; if (ipj  n) { i1 = ipj; for(j1=0; j1ipj; j1++) { s4 += mas[i1, j1]; i1--; } } if (ipj >= n) { g = p - j; j1 = p; m = i - g; u=p-m; while (t  u) { s5 += mas[m, j1]; m++; j1--; t++; } } res1 = s4 + s5; return res1; } public void show() { for (i = 0; i  n; i++) { richTextBox1.Text += "\n\n"; for (j = 0; j  n; j++) { richTextBox1.Text += " "; richTextBox1.Text = richTextBox1.Text + mas[i, j].ToString(); } } richTextBox1.Text += "\n\n"; } private void button1_Click(object sender, EventArgs e) { prover(); label3.Text = nom.ToString(); } } }

если цикл while делать 13000 и больше, то стек переполняется.
90 / 91 / 51
Регистрация: 19.06.2013
Сообщений: 323

Лучший ответ

Сообщение было отмечено Nextus как решение

Решение

Nextus, ооохх!
Первое. Вот видите, написали программу — зразу стало понятнее.
Так у Вас стек вызовов переполнен! 5000 раз рекурсия идет, а потом стек вызовов забит! Я думал, у Вас стек «локальными» переменными забит!

Второе. Один простой банальный вопрос: А зачем Вам вообще нужна рекурсия? У Вас функция никаких параметров не принимает, ничего не возвращает, и Вы просто в конце функции повторяете эту же функцию — сохраняя адрес в стеке вызовов, тем самым забивая его!
У Вас стоит условие 12 500 раз вызывать эту функцию. Просто вынесите ее в цикл, и крутите сколько нужно:

1 2 3 4 5 6 7 8
private void button1_Click(object sender, EventArgs e) { for (int i = 0; i  200000; i++) { prover(); } label3.Text = nom.ToString(); }

А в самой функции уберите эту рекурсию

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
public void prover() { rasstanovka(); control = 0; sumcontrol(); if (control == 8) { // show(); nom++; } mas[rami, ramj] = 0; chek = rami; chek1 = ramj + 1; //qqq++; //while (qqq < 13000)// // prover(); //> }

И запомните: рекурсия, это Вам не шуточки Ее нужно применять только тогда, когда она Вам реально нужна, а не потому что Вам захотелось вызывать одну и ту же функцию через этот прекрасный инструмент «рекурсия»! Наоборот, лучше искать способы НЕ использовать ее. В Вашей задаче нет потребности использовать ее

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

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