c - 优化嵌套循环的 C 代码

标签 c performance optimization for-loop

我有以下代码

for(i=0;i<16;i++)
  for(j=0;j<16;j++)
  {
     in=(i+u*j+rl+rc)&15;
     jn=(v*i+(u*v+1)*j+rc)&15;
     x1[i*16+j]=x2[in*16+jn];
   }

一些注意事项:

  1. rlrcuv 是范围从 0 到 15 的随机值
  2. x1x2 是 256 个值的数组,每个数组值的范围在 0 到 255 之间
  3. 如果我想使用查找表来实现此代码,则需要 16MB 和这么大的内存

最佳答案

这是一个想法:

尝试提取计算中至少在内部循环之外不会改变的部分。例如,in 计算中的 i + rl + rc 不需要位于循环内部。一旦你明白了这一点,你就会意识到 in 的值每次迭代都会增加 u,当然是模 16。因此,您可以进行加法,而不是乘法。

jn 计算还引用了一些您可以提取的内容。

当然,这是假设您实际上知道这是一个性能瓶颈(对其进行分析!)并且编译器不够智能,无法为您进行此类优化。如有疑问,请检查组件。

关于c - 优化嵌套循环的 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17085698/

相关文章:

arrays - 为什么函数返回的数组总是空数组?

c - 奇怪的结构和 typedef 定义

c - 单向链表中的删除

c - 使用通用案例进行开关改进

python - 查找落在给定范围之间的索引

sql - 当结果集很大且无法按索引排序时优化 "ORDER BY"

javascript - 优化 jQuery 选择器 - 哪个更快?

c++ - Capstone cs_disasm 仅反汇编一小部分代码

javascript - 显示多个元素时性能不佳

ruby-on-rails - Unicorn:要使用多少个工作进程?