Современные процессоры имеют обширную конвейерную обработку, то есть они загружают необходимые инструкции и данные задолго до того, как они действительно выполнят инструкцию.
Иногда данные, загруженные в конвейер, становятся недействительными, а конвейер должен быть очищен и перезагружен новыми данными. Время, необходимое для пополнения трубопровода, может быть значительным и замедлить производительность.
Если я вызываю указатель на функцию в C, достаточно ли достаточно конвейера, чтобы понять, что указатель в конвейере является указателем на функцию и что он должен следовать этому указателю для следующих инструкций? Или будет иметь указатель на функцию, чтобы сократить конвейер и снизить производительность?
Я работаю на C, но я думаю, что это еще более важно в С++, где многие вызовы функций проходят через v-таблицы.
<ч/" > изменить
@JensGustedt пишет:Чтобы быть реальным хитом производительности для вызовов функций, функция, которую вы вызов должен быть предельно кратким. Если вы это заметите, кода, вы обязательно должны пересмотреть свой дизайн, чтобы этот вызов быть встроенным
К сожалению, это может быть ловушка, в которую я попал.
Я написал целевую функцию малой и быстрой по соображениям производительности.
Но на него ссылается указатель на функцию, так что его можно легко заменить другими функциями (просто сделайте ссылку указателя другой функцией!). Поскольку я ссылаюсь на него с помощью указателя на функцию, я не думаю, что он может быть встроен.
Итак, у меня есть чрезвычайно краткая, не-встроенная функция.