如果我经常使用间接,但目标具有相同的地址,间接成本是否会接近零?
示例: -
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
是相关的数据结构。