在C中访问指针的指令有多少?

Der*_*rek 5 c pointers instructions

我想弄清楚在C中访问指针需要多少个时钟周期或总指令.我不认为我知道如何弄清楚例如,p-> x = d-> a + f-> b

我会假设每个指针有两个加载,只是猜测指针会有一个加载,以及值的加载.所以在这个操作中,指针分辨率将是一个比实际添加更大的因素,只要试图加速这个代码,对吧?

这可能取决于所实现的编译器和架构,但我是否走在正确的轨道上?

我已经看到了一些代码,其中每个值,例如,3个添加,来自a

 f2->sum = p1->p2->p3->x + p1->p2->p3->a + p1->p2->p3->m
Run Code Online (Sandbox Code Playgroud)

结构的类型,我试图定义这是多么糟糕

San*_*nto 8

这取决于手头的架构.

某些体系结构可以为指令引用/取消引用内存,而无需先将其加载到寄存器中,而其他体系结构则不会.某些体系结构没有计算偏移量的指令概念,并且会使您加载内存地址,向其添加偏移量,然后允许您取消引用内存位置.我确信芯片到芯片的差异更大.

一旦超过这些,每条指令也需要不同的时间,具体取决于架构.说实话,这是一个非常非常小的开销.

为了您的提领的项目链立刻问题,缓慢将进来的事实,很可能有一个参考穷地方越远,你的提领走链.这意味着更多的缓存未命中,这意味着更多的命中主内存(或磁盘!)来获取数据.与CPU相比,主内存非常慢.

  • @Derek:这将来自改进缓存局部性. (3认同)