【发布时间】:2011-02-14 09:45:45
【问题描述】:
我试图弄清楚访问 C 中的指针需要多少时钟周期或总指令。我想我不知道如何计算,例如 p->x = d->a + f-> b
我会假设每个指针有两个负载,只是猜测会有一个负载用于指针,一个负载用于值。所以在这个操作中,指针解析将是一个比实际加法更大的因素,就试图加快这段代码的速度,对吧?
这可能取决于实现的编译器和架构,但我是否走在正确的轨道上?
我看过一些代码,其中使用的每个值,比如 3 个加法,都来自一个
f2->sum = p1->p2->p3->x + p1->p2->p3->a + p1->p2->p3->m
结构类型,我试图定义这是多么糟糕
【问题讨论】:
-
取决于地址模式恕我直言 - 近跳转/长跳转,地址计算...
-
记住编译器应该在获取一次后将其中的大部分移到堆栈中。如果不是,而且你不需要担心多线程,你可以自己缓存指针追逐。
-
@Robert:如果多线程会影响示例中的指针取消引用,那么代码需要显式序列化 - 优化编译器将始终能够将
p3缓存到寄存器中并将其用于所有 3 个成员访问(假设没有使用volatile成员)。 -
@Michael Burr - 是的;我正是这个意思。 +1 解释。
标签: c pointers instructions