什么代码更占用CPU资源:while(* p)或while(i--)?

时间:2019-01-12 00:19:08

标签: c micro-optimization

哪些C代码会使CPU花费更多:

while(*pointer){ 
    pointer++; 
} 

while(counter > 0){ 
    pointer++; 
    counter--; 
}

2 个答案:

答案 0 :(得分:1)

如果您已经偶然知道大小,那么我希望它迭代一些已知的次数会更快,而不是每次迭代都要测试一个指针才能知道是否再次循环。

答案 1 :(得分:0)

*pointer名义上需要从内存中提取数据,这通常是代码中显示的最昂贵的操作。

如果我们假设您的代码直接编译为与C抽象机中描述的操作相对应的显而易见的程序集,而无需进行优化,则现代台式机CPU通常每个周期可以执行一次循环迭代,除了内存访问。也就是说,他们可以增加一个指针或计数器,测试其值并进行分支,每个周期的吞吐量为一组。

在实际程序中使用这些操作时,通常会将它们与正在执行的其他操作相形见war。编译器通常非常擅长优化,以至于用于表示循环迭代和终止的方法对性能几乎没有影响—优化可能会生成等效代码,无论表达式的变化如何(例如增加计数器与迭代指向某个最终值的指针)的差异。 (这不包括使用指针从内存中获取值进行测试。这确实增加了复杂性。)