Ответ на все вопросы о производительности - «сравните и узнайте». Всегда. Таким образом, ваши реальные результаты выполнения являются вашим ответом - эмпирически, вот как он себя ведет. Вы можете узнать почему , используя что-то вроде инструментов callgrind / cachegrind от valgrind.
Теперь я собираюсь проигнорировать тот факт, что вы говорите о хешировании - я думаю, вы знаете, что если стоимость вычисления хеша составляет значительную долю от стоимости выполнения тела функции, то запоминание не происходит помогать. Итак, представьте, что хэш имеет нулевую стоимость для целей ниже.
Все это говорит о том, что одним из главных факторов производительности кода, интенсивно использующего процессор, является частота обращений в кэш . Это то, должен ли ваш процессор, когда он ищет информацию, выходить в оперативную память, чтобы получить ее; если в кэше уже жарко, задержка доступа в тысячи раз ниже, а процессор выполняет свою работу быстрее (я немного упрощаю, потому что не все обращения к памяти вызывают остановку конвейера, но это суть ).
Итак, хотя «использование большего количества памяти» не напрямую связано с уменьшением производительности (я имею в виду, что акт его использования делает, но я предполагаю, что вы не говорите о том, как это стоит того, чтобы выделять объекты здесь), когда у вас более широкий объем ОЗУ, в котором могут лежать нужные вам вещи, шансы получить попадание в кеш ниже, что может значительно снизить скорость выполнения вашего кода.
Мемоизация - это только выигрыш, когда выполнение вашей функции занимает нетривиальное время. Обычно это так, но это компромисс, и даже в идеальных условиях запоминание десяти вызовов функций до пяти никогда не даст вам теоретического ускорения на 50%.
Это нелогичное поведение («но Бореалид, я делаю больше работы, как это может быть быстрее ?!») является ярким примером того, почему вы всегда должны перепроверять, чтобы увидеть, что « оптимизация ", которую вы поставили на место, на самом деле повышает производительность. Преждевременная оптимизация - корень всего зла.