Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Управляемая компиляция  (Прочитано 12970 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #30 : 15-02-2011 20:43 » 

ezus, вызовы процедур гораздо накладнее к тому же. Да и стековая память не такая резиновая, как куча

хотя, тут дотнет, за него не могу точно говорить ))
Записан

ezus
Опытный

il
Offline Offline

« Ответ #31 : 15-02-2011 20:53 » 

вызовы процедур гораздо накладнее к тому же.
Что верно, то верно. Хотя с точки зрения законов декомпозиции алгоритма на функции я не вижу уменьшение количества функций или их вызовов, во всяком случае в серьезных программах.
Цитата
Да и стековая память не такая резиновая, как куча
А вот это утверждение не очевидно, если вообще верно.

Но все это скорее относится к области эстетико-философских предпочтений в программировании.
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #32 : 15-02-2011 21:08 » 

>>А вот это утверждение не очевидно, если вообще верно.

проверь Улыбаюсь
Записан

ezus
Опытный

il
Offline Offline

« Ответ #33 : 15-02-2011 21:20 » 

проверь Улыбаюсь
Что проверить? Задать в параметрах стек на всю память?  Улыбаюсь Или что?
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #34 : 16-02-2011 17:26 » 

ezus,

утверждение следующее:
>>стековая память не такая резиновая, как куча

как проверить - очевидно, что попробовать, скажем, миллион раз вызвать процедуру рекурсивно, а потом создать контейнер на миллион объектов, которые передаются при вызове в первом способе Улыбаюсь

А предел - он, конечно, и у кучи есть
Записан

Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #35 : 16-02-2011 21:28 » 

Алексей1153++, думаю, тут речь больше о том, что когда памяти мало, выгоднее держать её всю в стеке, не позволяя всякое баловство в виде кучи и динамического выделения. Это сильно урезает возможности (хотя они, по сути, в любом случае крайне скудны), с одной стороны, но с другой - не распыляет ресурсы. Стек на всю память - это, конечно, абсурд на современных машинах, потому что с ним же одним работать неудобно, но увеличивать его размер до этого абсурда, насколько мне известно ничто особо не мешает Улыбаюсь

Кстати, о цене рекурсивных вызовов. В языках с оптимизацией хвостовой рекурсии итеративные алгоритмы, записанные в форме рекурсивных вызовов, не приводят к затратам, потому что компилятор сам превращает рекурсивный вызов в цикл.
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #36 : 17-02-2011 10:17 » 

Кстати, о цене рекурсивных вызовов. В языках с оптимизацией хвостовой рекурсии итеративные алгоритмы, записанные в форме рекурсивных вызовов, не приводят к затратам, потому что компилятор сам превращает рекурсивный вызов в цикл.
а как узнать, превратит он или нет ? Опять же - отладка удобнее без вызовов всё же
Записан

ezus
Опытный

il
Offline Offline

« Ответ #37 : 20-02-2011 09:01 » 

Опять же - отладка удобнее без вызовов всё же
Опять без вызовов?
Если ты имеешь в виде без рекурсивных вызовов, то ты прав.
А если это касается вызова любых функций, то это встречается крайне редко, во всяком случае у меня.

Обычно это так: есть функция типа "обработать некий ноуд".

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

И там и там число вызовов этой функции в принципе одинаково.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #38 : 20-02-2011 09:34 » 

Вообще говоря, полезно отделять код обхода коллекции (итератор) и код обработки узла (например, посетитель). Поэтому решение, когда функция получает корневой узел и дальше крутится как хочет, - не очень-то хорошее решение с точки зрения удобства отладки.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines