Czy wskaźniki funkcji wymuszają usunięcie potoku instrukcji?

Nowoczesne procesory mają obszerne potokowanie, czyli ładują niezbędne instrukcje i dane na długo przed faktycznym wykonaniem instrukcji.

Czasami dane ładowane do potoku zostają unieważnione, a potok musi zostać wyczyszczony i ponownie załadowany nowymi danymi. Czas potrzebny na uzupełnienie rurociągu może być znaczny i spowodować spowolnienie wydajności.

Jeśli wywołam wskaźnik funkcji w C, czy potok jest wystarczająco inteligentny, aby zdać sobie sprawę, że wskaźnik w potoku jest wskaźnikiem funkcji i że powinien podążać za tym wskaźnikiem dla następnych instrukcji? Czy też posiadanie wskaźnika funkcji spowoduje, że potok usunie i zmniejszy wydajność?

Pracuję w C, ale wyobrażam sobie, że jest to jeszcze ważniejsze w C ++, gdzie wiele wywołań funkcji odbywa się przez tabele v-table.

edytować

@JensGustedt pisze:

Aby być prawdziwym trafieniem wydajności dla wywołań funkcji, funkcja, którą wywołujesz, musi być bardzo krótka. Jeśli zauważysz to, mierząc swój kod, na pewno powrócisz do swojego projektu, aby zezwolić na wstawienie tego połączenia

Niestety, może to być pułapka, w którą wpadłem.

Napisałem funkcję docelową małą i szybką ze względu na wydajność.

Ale odwołuje się do niego wskaźnik funkcji, dzięki czemu można go łatwo zastąpić innymi funkcjami (wystarczy, że wskaźnik odniesie się do innej funkcji!). Ponieważ odwołuję się do niego za pomocą wskaźnika funkcji, nie sądzę, aby można go było wstawić.

Mam więc bardzo krótką, nieokreśloną funkcję.

questionAnswers(4)

yourAnswerToTheQuestion