Вынуждают ли указатели функций очистить конвейер команд?

Современные процессоры имеют разветвленную конвейерную обработку, то есть они загружают необходимые инструкции и данные задолго до того, как они фактически выполняют инструкцию.

Иногда данные, загруженные в конвейер, становятся недействительными, и конвейер должен быть очищен и загружен новыми данными. Время, необходимое для повторного заполнения конвейера, может быть значительным и привести к снижению производительности.

Если я вызываю указатель на функцию в C, достаточно ли интеллектуален конвейер, чтобы понять, что указатель в конвейере является указателем функции и что он должен следовать этому указателю для следующих инструкций? Или наличие указателя на функцию приведет к очистке конвейера и снижению производительности?

Я работаю в C, но я полагаю, что это еще более важно в C ++, где многие вызовы функций осуществляются через v-таблицы.

edit

@JensGustedt пишет:

To be a real performance hit for function calls, the function that you call must be extremely brief. If you observe this by measuring your code, you definitively should revisit your design to allow that call to be inlined

К сожалению, это может быть ловушка, в которую я попал.

Я написал целевую функцию маленькой и быстрой по соображениям производительности.

Но на него ссылается указатель на функцию, так что его можно легко заменить другими функциями (просто сделайте ссылку на указатель другой функцией!). Поскольку я ссылаюсь на него через указатель на функцию, я не думаю, что он может быть встроенным.

Итак, у меня очень короткая, не встроенная функция.

Ответы на вопрос(4)

Ваш ответ на вопрос