在循环次数较少的时候一般不会发现for循环的写法会对效率产生多大问题,但一旦循环次数较多,比如说上万,循环层数较多,效率问题就非常明显了,我是在做一个数据量非常大有三层for循环的项目的时候,为显示曲线出来太花费时间,客户体验会非常不好,才研究这个情况的,事实证明,优化后的多重for循环提升了一大半的效率,是不是很神奇。
当然,本文也有借鉴其他同胞的方法。

  1. 实例化变量放在for循环外,减少实例化次数,尽量只实例化一次;

  2. 普通变量 改为 寄存器变量
    i++ 改为 ++i

    int i=0, j;
    j=++i; //前置版本,运算对象先自增1,然后将改变后的对象作为求值结果,再赋值给j;
    j=i++; //后置版本,先赋值给j;再运算对象自增1,但求值结果是运算对象改变之前那个值的副本.

    C++Primer 中解释:前置版本的递增运算符避免了不必要的工作,它把值加1后直接返回改变了的运算对象。与之相比,后置版本需要将原始值存储下来以便于返回这个未修改的内容,如果我们不需要修改前的值,那么后置版本的操作就是一种浪费。

  3. for(int i = 0; i<50; i++)
    循环条件使用<要快于<=,>和>=同理;

  4. 把外层可以计算的尽可能放到外层,减少在内层的运算,有判断条件的语句和与循环不相关的操作语句尽量放在for外面;

  5. 应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数;
    采用的是行优先访问原则,与元素存储顺序一致。

  6. 对于一个可结合和可交换的合并操作来说,比如整数的加法或乘法,
    我们可以通过将一组合并操作分割成 2 个或更多的部分,并在最后合并结果来提高性能。
    原理:
    普通代码只能利用 CPU 的一个寄存器,分割后可以利用多个寄存器。
    当分割达到一个数量时,寄存器用完,性能不再提升,甚至会开始下降。
    用代码来描述,如下:

    // 一般情况下的代码 for (i = 1; i < n+1; i++)
    {res = res OPER i;
    }// 循环分割后代码for (i = 1; i < n; i+=2)
    {res1 = res1 OPER i;res2 = res2 OPER (i+1);
    }

    int 整数加法,性能测试结果对比如下:
    整数的加法,普通代码运行 26s,循环分割后,18s。
    浮点数计算的性能提升,明显大于整数,乘法的性能提升,略大于加法。

多重for循环优化,提升运行效率相关推荐

  1. 多重 for 循环优化,提升运行效率

    在循环次数较少的时候一般不会发现 for 循环的写法会对效率产生多大问题,但一旦循环次数较多,比如说上万,循环层数较多,效率问题就非常明显了,我是在做一个数据量非常大有三层 for 循环的项目的时候, ...

  2. For 循环优化,提升效率

    首先,我们初始化一个集合 list,如下: List<String> list = new ArrayList<String>(); 方法一:最常规的不加思考的写法 优点:较常 ...

  3. matlab 多重循环在最外层加断点_循环优化之循环分块(loop tiling)

    引言 编译器里的循环优化有两个重要的目标,一是提高局部性,二是提高并行性,loop tiling是提高数据局部性最重要的优化之一,是传统编译器和深度编译器考虑的重中之重,我们今天来看看如何做loop ...

  4. 三重for循环优化_MATALB中对循环操作的优化

    众所周知,MATLAB程序效率最低最有潜力的地方便是循环了.最常见的循环莫过于对矩阵中的每一个元素进行操作,对于编程思维还在C语言或者C++,JAVA的人来说,第一反应就是两层循环,先来个 " ...

  5. DRO:SFM任务中的深度循环优化器(阿里巴巴AI Lab)

    代码.论文地址:在公众号「3D视觉工坊」,后台回复「DRO」,即可直接下载. Motivation: 解决一个优化问题,常见的优化器比如梯度下降法, 牛顿法等, 一般会先计算梯度------>再 ...

  6. 基于中间代码的优化中,循环的查找算法有哪些?循环优化的方法有哪些?举例说明。

    基于中间代码的优化中,循环的查找算法有哪些?循环优化的方法有哪些?举例说明. 基于中间代码的优化中,循环的查找算法有哪些?循环优化的方法有哪些?举例说明. 西北工业大学编译原理课件第八章 代码优化.p ...

  7. 编译优化之 - 通用循环优化

    前言   循环是程序中最常见结构,针对循环已有众多的优化技术.循环的优化分为源码上的修改和编译器的优化,编译器能自动执行许多循环优化技术,但对源代码的修改可辅助编译器就行优化处理. 1. 源码上的优化 ...

  8. java与seo_java实现seo优化 提高运行效率

    java实现seo优化是很多网站都希望自己的工程师做到的,而且优化得好可以很好地提高我们的网站工作效率,也让用户浏览更多的内容,如果你有兴趣,那就随小编了解更多java实现seo优化的资讯吧. jav ...

  9. 深度循环优化器DRO:从视频流估计深度和相机轨迹

    ©作者|朝言 学校|香港科技大学 (HKUST) 研究方向|计算机视觉 我们提出了一个基于神经网络的端对端深度循环优化器,能够实时从视频中计算出视频流中每张图的深度和对应的相机轨迹,效果超越了之前所有 ...

最新文章

  1. factory i/o下载_推荐 Dynalist.io 大纲笔记整理工具
  2. 关于 MSDTC 分布式事务两个常见错误
  3. 程序员基本功 07 面向对象的陷阱
  4. 【ArcGIS遇上Python】ArcGIS Python实现长时间序列遥感影像批量处理--以裁剪为例
  5. for循环批量写文件 shell_shell脚本:for循环批量重命名带空格文件名的文件
  6. SpringBoot与SpringCloud集成
  7. InnoDB之Dirty Page、Redo log
  8. SG2525_电压模式PWM——科时进商城
  9. Layui表单验证及提交
  10. web 前端面试题50道
  11. 1. 虚拟化Docker
  12. #SpringBoot#阿里云服务器#将微信小程序后端代码部署到阿里云服务器 http转https
  13. 怎么用电脑录制游戏视频
  14. Windows下CMD操作常用指令详解
  15. 我的编程之路点滴记录(五)
  16. Selenium—获取页面的title,url;使用句柄方式切换窗口
  17. Mac截图很大很怎么变小?
  18. D3.js v5.0 旭日图
  19. java 五子棋_Java GUI 单机版五子棋
  20. vault mysql_Hashicorp vault 简明配置教程

热门文章

  1. PictureSelector九宫格图片展示
  2. python求级数的值_python中的级数和
  3. RDS MySQL和Mongodb 物理备份文件.xb恢复到自建数据库
  4. 活动二维码怎么制作?如何将活动内容做成二维码图片?
  5. 关于斐讯K2无管理员密码路由器重置问题
  6. vue3+jsQr实现手机浏览器调用本地摄像头扫描并识别二维码
  7. Java-购物车实践与应用
  8. IOS手机安装完fiddler证书后依然无法上网
  9. gateway和openfeign依赖冲突
  10. 【资讯】FL6410改名OK6410-B,硬件接口丰富,挑战mini6410送19张ARM光盘