在模函数和timespec规范化中,内核代码通过循环计算模块,并防止编译器将循环优化为模块化操作符。
为什么要这么做?
我希望如果这个优化不是很好,编译器就不会这么做。但是,可能存在这种优化速度更快的体系结构。为什么所有架构都需要这段代码?
发布于 2013-06-27 11:37:11
如果程序员知道红利只会比除数稍微大一点(因此迭代版本只会循环一两次),就会这样做。不能指望编译器能搞清楚这一点。div64.c中的这个注释解释了这一点
/*
* Iterative div/mod for use when dividend is not expected to be much
* bigger than divisor.
*/您所指向的模块化函数是iter_div_u64_rem(),在需要时显式使用;对于常规的模块化版本,有div_u64_rem()。
https://stackoverflow.com/questions/17341298
复制相似问题