我正在使用 callgrind/qcachegrind 分析一些信号处理代码,其中涉及许多操作std::vector<float>
。
我从 Mac OS 的内置nearbyint
函数中得到了一个相当严重的热点。
这似乎几乎完全由这个向量函数调用。
这又是从我的许多类成员函数中调用的。对我来说,这_push_back_slow_path
看起来像是一些分配瓶颈,但我不完全确定为什么。在运行循环中,我没有改变向量的大小。所有正在发生的事情,偶尔会通过引用复制它们,迭代,或者data()
操作用于获取 vDSP 操作的原始指针。例如 。. .
vector
当我将原始数据指针传递给 vDSP 函数时,为什么它是这个热点的罪魁祸首?- 这个热点的可能罪魁祸首是什么?
- 为什么会
basic_string
出现?已分析的库不使用字符串。 std::array
尽可能切换到是明智的下一步行动吗?
随时询问更多信息,我很乐意编辑问题。
编辑 1
作为对第一个答案的回应,我没有明确地push_back
在任何地方打电话。热点出现在看似疯狂的地方,例如浮动上的内联日志操作。这可能是编译器优化做奇怪的事情吗?