|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.12.2015, 23:22 | #11 | |
xor esp, esp
Форумчанин
Регистрация: 11.02.2014
Сообщений: 135
|
Цитата:
Для вызова функции требуется передать ей адрес возврата, в стандартных конвенциях вызовов адрес возврата передается через стек, в 32-х битных приложениях занимает 4 байта. Для вызова функции используются инструкция call для вызова и ret для возврата, связка которых НАМНОГО, НАМНОГО медленнее операторов условного перехода. К тому же, стек не резиновый, допустим, по умолчанию имеется стек 1 мб. Пренебрегая занятой областью - мы имеем 1048576 байта, т.е при вложенности рекурсии рядом со значением 262144 у нас произойдет переполнение стека и программа вылетит. Это в теории, а на практике у нас вылет произойдет гораздо раньше, т.к все локальные переменные лежат на стеке, т.е занимают память на стеке, а освобождаются только при возврате из функции, т.е после того, как условие углубления в рекурсию будет ложно. Пример: программа входит в рекурсию декрементируя некоторое значение N до тех пор, пока N не станет отрицательным. Программа использует локально-объявленный массив типа int из 100 элементов. Найти N при котором программа вылетит с вероятностью 1, стек равен 1 мб. Сможешь?))) --------- Ответ: При N = 2570, пугает? 1 МБ = 1024 * 1024 байт, одна функция занимает в стеке 100 * 4 байт + 4 байт ( адрес возврата ) + 4 байт ( сохранение значения регистра ebp ) Добро пожаловать в реальность, киса Последний раз редактировалось Malriser; 15.12.2015 в 23:36. |
|
15.12.2015, 23:33 | #12 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
15.12.2015, 23:38 | #13 | |
xor esp, esp
Форумчанин
Регистрация: 11.02.2014
Сообщений: 135
|
Цитата:
Ты заставь скомпилировать компилятор код, чтобы он вызывал функцию через jmp, а возвращался через jmp r32. Да даже на асме никто не будет так реализовывать вызов функций, ибо извращение. На практике - рекурсия, самое медленное, как можно реализовать алгоритм При всем уважении, но ТАКОЕ можно объяснить только так, как я описал. И я не пудрю мозги, а то потом удивляются, почему рекурсия вызывает вылет даже при глубине 2570, а при 2500 работает спокойно. А читайте мой предыдущий пост Последний раз редактировалось Malriser; 15.12.2015 в 23:47. |
|
16.12.2015, 13:39 | #14 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Например VM Автолиспа рекурсию умеет сворачивать и даже предсказывать. Так что повторюсь: Не убеждай ТС в том что существует только один путь.
I'm learning to live...
|
|
16.12.2015, 13:54 | #15 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Виталий, обратите внимание, что обсуждение идёт в ветке "С/C++"
Вы готовы представить пруф - компилятор C/C++, который развернёт рекурсию в цикл? На примере того самого злополучного кода с BubleSort? В полученном выполняемом файле не будет рекурсии (т.е. вложенного вызова процедурой самой себя)?!! Не пойму, к чему этот спор? К тому, что мы все не правы, и в каких-то компиляторах (том же Лиспе) нужно использовать рекурсию всегда, вместо всех циклов, пусть компилятор удивится?! |
16.12.2015, 13:58 | #16 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Как хотите. Потом не удивляйтесь, когда при отладке вам отладчик выкатит неожиданные действия после того как оптимизатор поработает.
Я офф...
I'm learning to live...
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Алгоритмы сортировки Cи | Панdopa | Помощь студентам | 6 | 17.06.2015 15:06 |
Ошибка.Алгоритмы сортировки.Язык си. | East Undia Trading | Помощь студентам | 6 | 14.05.2014 22:42 |
Алгоритмы сортировки пирамидальный(кучей) и быстрой сортировки (с++) | mmd12 | Помощь студентам | 4 | 17.05.2012 14:14 |
Алгоритмы сортировки массивов С++ | Sunless | Помощь студентам | 1 | 29.03.2011 17:10 |
C++ алгоритмы сортировки | 1ok | Помощь студентам | 5 | 18.09.2010 15:27 |