Во-первых, ответ будет зависеть от вашего приложения.
Во-вторых, даже при сильном дублировании я сомневаюсь, что есть смысл в реализации описанного вами механизма или даже того, что это возможно в общем случае.дело.Если вы вызываете метод и передаете его параметры, вы должны сделать это тем или иным способом.
Может быть преимущество в том, чтобы делать это каким-то особым образом - например, есть несколько соглашений о вызовах функций и много CКомпиляторы / C ++ (например, gcc) позволяют выбирать между передачей параметров в стеке или через регистры.В некоторых случаях последний может быть быстрее - вы можете попробовать и сравнить его, если это поможет вашему приложению.
Но в общем случае стоимость обнаружения дублированных значений в стеке и их «повторного использования», вероятно, будет намного вышепревзойти любые выгоды от меньшего стека.Код для отправки и извлечения значений действительно прост (всего несколько инструкций процессора в оптимизированном случае), код для поиска и повторного использования дубликатов - вряд ли так.Вам также необходимо каким-то образом хранить информацию о том, какие значения уже находятся в стеке и как их найти - нетривиальная структура данных.За исключением некоторых действительно странных случаев, я не думаю, что это будет меньше, чем сами копируемые данные.
Что бы вы могли сделать, это переписать ваш алгоритм таким образом, чтобы исключить некоторые вызовы функций.Например, если результат вашей функции зависит только от входных аргументов, вы можете каким-то образом кэшировать или запоминать результаты, избегая, таким образом, повторных вызовов с одинаковыми значениями.Это действительно может принести некоторые выгоды, хотя обычно это компромисс между временем и памятью.Получение преимущества как в памяти, так и во времени процессора редко возможно.Кроме того, переписывание вашего алгоритма на самом деле не «избегает дублирования данных в стеке».
В любом случае, для первоначального вопроса, я думаю, что идея нежизнеспособна, и вы должны посмотреть на оптимизации в других местах.
PS: Вариант использования может несколько напоминать оптимизацию хвостового вызова, так что, возможно, это направление, на которое стоит обратить внимание - но если вы реализуете его самостоятельно, я бы также подумал, что это попадет в категорию «изменить свой алгоритм».Возможно, может помочь переход от рекурсивного алгоритма к итерационному.