повышение:: функционируйте производительность во время выполнения

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

Что является издержками, представленными повышением:: функция при вызывании сохраненной функции? Есть ли один? Насколько большой это?

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

Погружающееся в источник повышение не ответило на много:>.

Также, если это - иждивенец компилятора, я главным образом интересуюсь GCC и MSVC.

7
задан Kornel Kisielewicz 2 January 2010 в 00:10
поделиться

2 ответа

Как указано в документации Boost , вызов функции boost::function в большинстве случаев влечет за собой стоимость одного вызова через указатель функции. Другими словами, если вам все равно придется использовать указатели функций, то это стирка, и вы получаете кучу расширенной функциональности бесплатно.

.
5
ответ дан 7 December 2019 в 10:02
поделиться

boost::функция превратилась в tr1, так что это функция std::tr1::на современных компиляторах, и просто функция std::на действительно на современных компиляторах.

В любом случае, как вы заметили, функция std::имеет ненулевые накладные расходы на создание (в том числе и на создание копий объекта). Теоретически, она должна иметь те же накладные расходы, что и необработанный указатель функции для вызова; т.е. есть один уровень индирекции - но действительно умные компиляторы могут встраивать этот уровень индирекции.

Конечно, есть вещи, которые можно хранить в std::функции, которые не могут быть подогнаны или сохранены в указателе функции.

.
1
ответ дан 7 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: