Прежде всего, если Foo работает с кешем процессора, то Bar также будет работать с кешем процессора.Разве это не должно ????????Таким образом, обе ваши функции получают одинаковое преимущество.Теперь предположим, что после первого времени foo равно A, а затем оно работает со средним временем B, так как оно работает с кешем процессора.Таким образом, общее время будет
A + B*(hugenumber-1)
Аналогично для Bar это будет
C + D*(hugenumber-1) //where C is the first runtime and D is the avg runtime using prscr cache
Если я не ошибаюсь, результат зависит от B и D, и оба они являются средним временем выполненияиспользуя кэш процессора.Поэтому, если вы хотите вычислить, какая из ваших функций лучше, я думаю, что кеш процессора не является проблемой, поскольку обе функции должны использовать это.
Отредактировано:
Я думаю, теперь все ясно.Поскольку Бар пропускает некоторые сложные математические операции, используя память, у него будет небольшое преимущество (может быть в нано / пико секундах).Так что для того, чтобы ограничить это, вы должны очистить ваш кэш процессора внутри цикла for.Поскольку в обоих циклах вы будете делать то же самое, я думаю, теперь вы получите лучшее представление о том, какая функция лучше.Уже есть обсуждение переполнения стека о том, как очистить кэш процессора.Пожалуйста, просмотрите эту ссылку надеюсь, что это поможет.
Редактировать детали: Улучшен ответ и исправлено написание