多次(地址)间接到同一地址的成本(在迭代器中使用)

时间:2017-02-14 13:14:43

标签: c++ performance optimization indirection

如果我经常使用间接,但目标具有相同的地址,间接成本是否会接近零?

示例: -

class C{
    public: int database[100000];
    //other functions
};
class B{
    public: C* c=nullptr;
};

第一个场景

int main(){
    //--- first scenario (direct call) ---
    C c;
    for(int n=0;n<100000;n++){
         c.database[n]=43;
         //call some complex function about "c"
         //call some non-related function 
    }
}

第二种情况

int main() {
    //--- second scenario (indirection) ---
    C c;
    B b1;  
    b1.c=c; 
    for(int n=0;n<100000;n++){
         b1.c->database[n]=43;
         //call some complex function about "c", but call in "b1.c" form
         //call some non-related function 
    }
}

两种情况都会花费(几乎)相同吗? 它被优化的可能性几乎相同?

我认为间接成本很低(因为c没有缓存未命中),
 但我不知道是否存在基础成本(b1.c-> vs c.)? (我是C ++的新手)

在实际情况中,B是一个迭代器,C是相关的数据结构。

0 个答案:

没有答案