[c++] vector :: operator []开销


Answers

在现代编译器中,在释放模式下,在启用优化的情况下,与原始指针相比,使用operator [] 没有任何开销:调用是完全内联的并且仅解析为指针访问。

我猜你是在某种程度上复制了赋值中的返回值,并且导致在指令中花费了25%的时间。 [与floatint不相关]

或者你的代码的其余部分是非常快速的。

Question

显然,在分析我的(科学计算)C ++代码之后,有25%(!)的时间用于调用vector::operator[] 。 真的,我的代码花费所有的时间读写vector<float> (也是一些vector<int> s),但是,我想知道是否应该有一些显着的开销operator[]相比,C风格的数组?

(我见过另外一个相关的问题,但关于[] vs at() - 但显然甚至[]对我来说太慢了!

谢谢,安东尼

(编辑:仅供参考:在Ubuntu上使用g ++ -O3版本4.5.2)




一般来说,不应该有显着的差异。 然而,实际上可能会出现差异,原因有很多,取决于编译器如何优化特定的代码。 一个显着的可能的区别:你正在分析,这意味着你正在执行检测代码。 我不知道你正在使用哪个分析器,但编译器进行性能分析时,由于各种原因,编译器经常会关闭内联。 你确定在这里不是这种情况吗?这是人为地导致索引似乎比内联的时间百分比要长。




Links



Tags

c++ c++   stl   vector