|  | Циклы и Рекурсия ↓ (Волшебник 25.01.2021 10:53)
 | ☑ | 
    
        | 0
    
        BaldKiwi   25.01.21✎ 02:55 | 
        Добрый день, задался таким вопросом, а что потребляет больше памяти, Цикл или Рекурсия и почему?     |  | 
    
        | 1
    
        rphosts   25.01.21✎ 03:14 | 
        Рекурсия тащит весь контекст, если ты его не ограничил, потом сами данные для интерпретатора о том, куда вернуть управление... И вообще ранее на глубине рекурсии порядка 6-7К начинались проблемы.     |  | 
    
        | 2
    
        BaldKiwi   25.01.21✎ 03:20 | 
        (1) То-есть я правильно понимаю, что допустим для оптимизации, лучше всего использовать циклы, чем рекурсии?     |  | 
    
        | 3
    
        rphosts   25.01.21✎ 03:53 | 
        (2) да     |  | 
    
        | 4
    
        H A D G E H O G s   25.01.21✎ 04:13 | 
        1.5 Кбайта стека тратится в последнем релизе, что ограничивает вложенность рекурсии 600-700 уровнями.     |  | 
    
        | 5
    
        H A D G E H O G s   25.01.21✎ 04:14 | 
        1.5 Кбайта стека тратится в последнем релизе на 1 уровень, что ограничивает вложенность рекурсии 600-700 уровнями.     |  | 
    
        | 6
    
        BaldKiwi   25.01.21✎ 04:29 | 
        (3) (5) Спасибо за информацию     |  | 
    
        | 7
    
        rphosts   25.01.21✎ 06:14 | 
        (4) на 64х-то?     |  | 
    
        | 8
    
        H A D G E H O G s   25.01.21✎ 10:53 | 
        (7) Размер стека везде 1 Мб. И увеличить его особо нельзя.     |  | 
    
        | 9
    
        Asmody   25.01.21✎ 11:02 | 
        Рекурсия - штука опасная. Для стековых машин вообще практически противопоказана. Может помочь оптимизация хвостовой рекурсии, но в 1С с этим никак.     |  | 
    
        | 10
    
        Кирпич   25.01.21✎ 11:22 | 
        (8) А что в 1с интерпретатор на системном стеке прям работает?     |  | 
    
        | 11
    
        H A D G E H O G s   25.01.21✎ 11:46 | 
        (10) Ну да.
Можно сделать рекурсию и смотреть размер стека на 100-200-300 уровне по точке останова через VmMap
 |  | 
    
        | 12
    
        H A D G E H O G s   25.01.21✎ 11:46 | 
        (10) А больше стека задать нельзя - потоки пользователей будут съедать память впустую, так как стек особо нигде не используется, кроме как рекурсии.     |  | 
    
        | 13
    
        Кирпич   25.01.21✎ 11:47 | 
        (11) попробовал. 1600 уровень прокатывает. 1700 валится.     |  | 
    
        | 14
    
        H A D G E H O G s   25.01.21✎ 11:47 | 
        (13) 8.3.18 ?     |  | 
    
        | 15
    
        Кирпич   25.01.21✎ 11:48 | 
        8.3.17     |  | 
    
        | 16
    
        H A D G E H O G s   25.01.21✎ 11:51 | 
        (15) В 8.3.18 все сломали :-)
попробовал на Дельфи - сломалось на 30000 уровне.
 |  | 
    
        | 17
    
        Кирпич   25.01.21✎ 12:03 | 
        (16) Ну это если параметры через стек не передавать. С параметрами то быстрее сдохнет.
А в 1с, похоже, параметры не через стек передаются. Чота добавляю параметры и ничего не меняется
 |  | 
    
        | 18
    
        H A D G E H O G s   25.01.21✎ 12:09 | 
        (17) Ссылки скорее всего передаются.     |  | 
        Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший