【发布时间】:2015-06-01 05:53:38
【问题描述】:
我有这种平静的代码,我想尽可能快地完成它。
我不是一个经验丰富的 c++ 开发人员,所以我很想知道你们是否想出了一些非常好的重新实现该算法,因为我删除了所有的作业,认为这是一件好事......
现在我真的不知道这是否是最好的做法。
那么,什么更快?
for(register uint pPos = 0; pPos < size; pPos++) {
img->setPixel(pPos % dst_w, pPos / dst_w,
buffer32[
sf * (
(pPos / dst_w * src_w) +
(pPos % dst_w)
)
]);
}
或
for(register uint pPos = 0, x = 0, y = 0; pPos < size; pPos++) {
x = pPos % dst_w;
y = pPos / dst_w;
img->setPixel(x, y,
buffer32[
sf * (
(y * src_w) + x
)
]);
}
旁注:我真的认为这是一件好事,我不明白反对票。
也感谢大家的cmets,学到了很多。
【问题讨论】:
-
编译器优化会使它们相等的机会很大(但理论上没有任何优化,第二个代码可能更快,因为与 1x 和赋值相比,2x 除法和取模非常慢。“可能”因为它取决于很多事情......)
-
旁注:寄存器已过时
-
你是用 C++ 编写的,而不是汇编程序,不要试图通过使用
register或移动简单的算术运算来超越你的编译器。 -
测量它。不要猜测(如果它真的那么重要。如果不是,请选择最易读的版本)。
-
在 for 循环中声明不用于循环逻辑的局部变量是不常见的。
标签: c++ image-scaling