每次我在类中通过指针访问并循环数组时,都会问自己同一个问题:
每次迭代时,解引用指针是否会产生额外的开销?解引用链是否会增加开销? 例如:
ClassA *a = new ClassA();
ClassB *b = new ClassB();
for( int i = 0; i < 10; i++){
a->b->array[i].foo();
}
如果我要猜的话,这可能涉及20个取消引用步骤,每个指针一个,10次迭代。但我同样可以想象,由于编译器将链接的指针转换为单个指针,因此它被减少到了10次。我甚至可以想象,由于某些缓存技巧或其他原因,它被减少到了1次。
有人能告诉我,并可能向我解释一下,这在性能方面的表现如何?非常感谢!
顺便说一句,我知道类似的问题已经在这里得到了回答,但是我无法推断出这个特定主题的答案。所以请不要责怪我再次提出这个话题。
a->
,b->
和array[i]
都是指针解引用,因此每次循环迭代您有3个解引用,共10次迭代。 - Remy Lebeau