Я профилирую некоторый код обработки сигналов, используя callgrind / qcachegrind, включающий много операций над std::vector<float>
,
Я получаю довольно серьезную точку доступа от встроенной в Mac OS nearbyint
функция.
Кажется, это почти полностью вызывается этой векторной функцией.
Это в свою очередь вызывается из многих функций моего класса. Для меня _push_back_slow_path
выглядит как какое-то узкое место в распределении, но я не совсем уверен, почему. Ни в одной точке цикла выполнения я не изменяю размер векторов. Все, что происходит, иногда они копируются по ссылке, повторяются или data()
op используется для получения необработанного указателя для операций vDSP. Например . , ,
vector
горячая точка, когда я передаю указатель на необработанные данные?basic_string
появляются? Профилированная библиотека не использует строки.std::array
по возможности, будь мудрым следующим ходом?Не стесняйтесь спрашивать больше информации, и я с удовольствием отредактирую вопрос.
РЕДАКТИРОВАТЬ 1
В ответ на первый ответ я явно не звоню push_back
в любом месте. Горячие точки встречаются в, казалось бы, помешанных местах, таких как эта встроенная операция регистрации на поплавке. Может ли это быть оптимизацией компилятора, делающей странные вещи?
Задача ещё не решена.
Других решений пока нет …