Comments 4
Я эксперементировал с TCO (хвостовые вызовы, а не просто рекурсия) в чистом gcc.
Мне удалось заставить его оптимизировать вызов функции по указателю с передачей параметров через стек и непосредственный вызов с передачей через регистры. Но вызов по указателю с передачей в регистрах не получилось. Почему так и не разобрался.
Писал небольшой интерпретатор байт-кода, в котором каждая команда была функцией на C, а состояние жило в аргументах.
Мне удалось заставить его оптимизировать вызов функции по указателю с передачей параметров через стек и непосредственный вызов с передачей через регистры. Но вызов по указателю с передачей в регистрах не получилось. Почему так и не разобрался.
Писал небольшой интерпретатор байт-кода, в котором каждая команда была функцией на C, а состояние жило в аргументах.
0
1. «выделение адреса функции (и связанных с ней переменных, например, структур) на стеке при каждом вызове» — корявый перевод. Не выделение, а размещение. Или выделение места для. Пока не прочитал оригинал, не мог понять, о чем речь.
Оригинал: www.viva64.com/en/b/0332
2. «не всегда возможна реализация хвостовых вызовов» — не всегда возможно иметь хвостовые вызовы. Слово «реализация» только запутывает и отсылает куда--то к особенностям компилятора.
Оригинал: www.viva64.com/en/b/0332
2. «не всегда возможна реализация хвостовых вызовов» — не всегда возможно иметь хвостовые вызовы. Слово «реализация» только запутывает и отсылает куда--то к особенностям компилятора.
+1
Sign up to leave a comment.
Хвостовая рекурсия в C++ с использованием 64-битных переменных — Часть 1