|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.04.2014, 15:14 | #11 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
А чему равен /STACK:xxx у компоновщика?
Думаю, что какой бы не был умный компилятор, он не в состоянии задать "правильный" размер стека. Особенно тогда, когда приложение специально написано для вызова исключения. К тому же, если воспользоваться обработкой исключительных ситуаций, можно продлить агонию некоторое время... |
27.04.2014, 15:38 | #12 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Либо настройте компилятор, либо меняйте на что ни будь посовременней.
В современных ОС таких ограничений нет! У меня ваша код накрутил где-то 87000 итераций, что при 12 байтах памяти в стеке дает как раз около одного мегабайта, что является размером стека по умолчанию. Стек (в теории) можно довести до около 2Г (если очень стараться - до 3Г) что есть предел для 32бит винды. |
27.04.2014, 15:49 | #13 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Мой GCC накрутил 64903 вызова, так что подтверждаю. Прога заняла в стеке 250 Кб и свалилась.
Цитата:
I'm learning to live...
Последний раз редактировалось Stilet; 27.04.2014 в 15:54. |
|
27.04.2014, 16:34 | #14 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
|
27.04.2014, 16:38 | #15 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,646
|
Проверил в VS2012 на Win7, настройки компилятора по умолчанию, получил 4718, на 1 итерацию больше!!! Но это в конфигурации Debug. Запустил в Release, идет бесконечно (с переполнением int и т.д.), видимо, компилятор развернул рекурсию в цикл.
E-Mail: arigato.freelance@gmail.com
|
27.04.2014, 16:46 | #16 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
В комплекте студии есть такая утилитка - dumpbin.exe
С ее помощью можно посмотреть сколько именно стека задано программе реально. dumpbin -headers file.exe |
27.04.2014, 21:33 | #17 |
Пользователь
Регистрация: 23.08.2011
Сообщений: 55
|
Заходим в Borland c++ builder 6 (он выпущен в 2002 году, когда дос давно умер). В опциях проекта идём на вкладку линкер и смотрим на max stack size (0x00002000), что в десятичной равно 8192 байта, т.к. переменные передаются через стек, понимаем, что waleri сморозил полную ахинею.
Если идёт переполнение инта, то ужО не нормально, просто в релиз не стоит галка "range check error", поэтому не валится.
"Пока бабка не смоет косметику, русский мужик не перекрестится" (C) Кто-то
Последний раз редактировалось Stilet; 27.04.2014 в 23:17. |
27.04.2014, 23:36 | #18 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,646
|
Что тут ненормального? Это говорит лишь о том, что число шагов более 2 миллиардов.
Проверил на таком примере: Код:
E-Mail: arigato.freelance@gmail.com
|
28.04.2014, 10:09 | #19 | |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Цитата:
Так что либо, будьте любезны, предоставить список современных ОС, которые накладывают такие ограничения (64К) либо ахинею несете вы. |
|
28.04.2014, 12:07 | #20 | ||
Пользователь
Регистрация: 23.08.2011
Сообщений: 55
|
Цитата:
Цитата:
"Пока бабка не смоет косметику, русский мужик не перекрестится" (C) Кто-то
|
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Дана строка, арифметические выражения вида A x B. Вычислить значение выражения | Un1q | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 09.12.2013 14:47 |
вычислить значение выражения (на C++) | laychan | Помощь студентам | 2 | 05.03.2012 11:32 |
вычислить значение выражения | ulechka128 | Помощь студентам | 0 | 25.12.2011 13:35 |
вычислить значение выражения | _Иван_ | Помощь студентам | 2 | 20.04.2011 18:58 |