C++循环展开,边界

标签 c++ performance loops

我有一个要展开的循环:

for(int i = 0; i < N; i++)
    do_stuff_for(i);

展开:

for(int i = 0; i < N; i += CHUNK) {
    do_stuff_for(i + 0);
    do_stuff_for(i + 1);
    ...
    do_stuff_for(i + CHUNK-1);
}

但是,我应该确保我不会用完原来的 N,比如当 N == 14 和 CHUNK == 10 时。我的问题是:什么是最好的/更快的/标准的/最优雅的(你说的它)怎么做?

一个解决方案是:

int i;
for(i = 0; i < (N % CHUNK); i++) 
    do_stuff_for(i);

for(i; i < N; i += CHUNK) {
    // unfolded, for the rest
}   

但也许有更好的做法

最佳答案

你可以使用 switch-case。

它叫做 Duff's Device

关于C++循环展开,边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8136184/

相关文章:

c++ - C/C++ 指针,ptr+1 = ptr +1 byte 还是 ptr+1*sizeof(pointer_type)?

c++ - 与其他跨平台正则表达式库相比,Oniguruma 有多好?

c++ 程序在不同的机器上显示出非常不同的内存行为

c++ - 检查失败后,Boost Unit Test将所有控制台文本永久变为红色

php - Laravel Eloquent : How does it work? 基于动态模式元数据查找 = 性能?

c - 为什么当输入的找零是 2.2 时,输出显示所需的最小硬币数的正确答案,但当我输入 4.2 时却显示错误的输出?

.net - 多核和线程感知 .Net 秒表?

performance - 为什么这么慢? (DF行中的循环与独立向量中的循环)

c++ - 在 C++ 中将 for 循环转换为 while 循环

node.js - 如何运行一个在循环中提取数据并在循环结束时获取数据的函数?