создание функций условно-бесплатное - предыдущий инстанс соберется garbage collector'ом, а какие-то компоненты "лишний" раз перерендерятся. оба эти процесса занимают цпу
useCallback в свою очередь предотвращает пересоздания и перерендеры, но это кеш. кеши надо где-то хранить (подсказка: в оперативке) и кроме того с кешом надо сверяться при каждом рендере (пересчитывать ключ кеша), чтоб достать результаты, что тоже требует цпу.
во многих случаях сумма ресурсов во втором варианте превышает сумму ресурсов в первом