该主题一般性地说明了一切。基本上在这样的情况:boost :: scoped_array中&p [0]与p.get()的性能影响
boost::scoped_array<int> p(new int[10]);
是否有这样做之间的性能有任何明显的差异:&p[0]
和p.get()
?
我问,因为我更喜欢第一个,它有一个更自然的指针,像语法。事实上,它使得它可以用一个本地指针或数组替换p,而不必改变其他任何东西。
我在猜测,因为get是一个单行的“return ptr;
”,编译器会内联该函数,我希望它足够聪明以便能够以不能解引用并立即引用的方式内联operator[]
。
有人知道吗?
我看过源码,运算符[]基本上只是做了一个“return ptr [i];” (有一些断言,但这是重要的代码)。我的问题是,在使用operator []函数的情况下,编译器是否足够聪明才能知道&ptr [0] == ptr。 – 2008-11-07 22:50:03
你在问编译器是否足够聪明以优化'ptr + 0'。检查你的编译器的输出。 – 2008-11-07 22:53:25
嘿,你可以说“我不知道”:-P。无论如何,我知道如果p是一个本地指针,它可以。我想如果运算符[]的参数在编译时是已知的,它*应该*能够将它全部归因于它。我想知道它是否。 – 2008-11-07 22:58:27