哪些C代码会使CPU花费更多:
while(*pointer){
pointer++;
}
或
while(counter > 0){
pointer++;
counter--;
}
?
答案 0 :(得分:1)
如果您已经偶然知道大小,那么我希望它迭代一些已知的次数会更快,而不是每次迭代都要测试一个指针才能知道是否再次循环。
答案 1 :(得分:0)
*pointer
名义上需要从内存中提取数据,这通常是代码中显示的最昂贵的操作。
如果我们假设您的代码直接编译为与C抽象机中描述的操作相对应的显而易见的程序集,而无需进行优化,则现代台式机CPU通常每个周期可以执行一次循环迭代,除了内存访问。也就是说,他们可以增加一个指针或计数器,测试其值并进行分支,每个周期的吞吐量为一组。
在实际程序中使用这些操作时,通常会将它们与正在执行的其他操作相形见war。编译器通常非常擅长优化,以至于用于表示循环迭代和终止的方法对性能几乎没有影响—优化可能会生成等效代码,无论表达式的变化如何(例如增加计数器与迭代指向某个最终值的指针)的差异。 (这不包括使用指针从内存中获取值进行测试。这确实增加了复杂性。)