0. gcc -o

gcc -o 的优化仍然是机械的,想当然的。只有做到深入理解计算机系统,加深对编程语言的理解,才能写出最优化的代码。

Linux下gcc 优化等级的介绍

  • gcc -o0 ⇒ 不提供任何优化;
  • gcc -o1 ⇒ 最基本的优化,主要对代码的分支、表达式、常量等进行优化,编译器会在较短的时间下将代码变得更加短小,这样体积就会变得更小,会减少内存的占用率,在操作系统进行内存调度时就会更快。
    • 但是事情没有绝对的优点,当一个庞大的程序被拆碎细分的话,内存占用会大大增加,由于当今系统大多数都是多线程,就会出现卡顿和反应延迟。
    • 大的项目代码不适合 gcc -o1 优化;
  • gcc -o2:是对 o1 的进阶,在 o1 在基础上会进行更严格的划分,最重要的是加入了寄存器的实用;

1. volatile 关键字

volatile 关键字能够阻止编译器的过度优化,可以做到如下两件事情:

  • 阻止编译器为了提高速度将一个变量缓存到寄存器而不写回;
  • 阻止编译器调整操作 volatile 变量的指令顺序;

2. register 关键字

将代码放在寄存器的方式是使用 register 修饰变量,适用于频繁调用的变量。

C/C++ 编译器优化相关推荐

  1. 最强通用编译器优化工具!MIT三篇顶会论文打造,准确率是传统方法5倍

    乾明 十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 新代码在自家芯片上运行状况如何?英特尔自己都没有别人家的新工具清楚. 这就是MIT耗时一年提出的研究成果,名为Ithemal,核心功能 ...

  2. 【Linux 内核 内存管理】优化内存屏障 ① ( barrier 优化屏障 | 编译器优化 | CPU 执行优化 | 优化屏障源码 barrier 宏 )

    文章目录 一.优化屏障 ( 编译器优化 | CPU 执行优化 ) 二.优化屏障源码 一.优化屏障 ( 编译器优化 | CPU 执行优化 ) " 代码 " 编译成 " 可执 ...

  3. 【转】C 编译器优化过程中的 Bug

    C 编译器优化过程中的 Bug 一个朋友向我指出一个最近他们发现的 GCC 编译器优化过程(加上 -O3 选项)里的 bug,导致他们的产品出现非常诡异的行为.这使我想起以前见过的一个 GCC bug ...

  4. 深入理解JVM虚拟机(八):编译器优化

    本博客从编译期源码实现的层次上让我们了解了Java源代码编译为字节码的过程,分析了Java语言中泛型.主动装箱/拆箱.条件编译等多种语法糖的前因后果. 1. 概述 java语言的"编译期&q ...

  5. String类型的认识以及编译器优化

    Java中String不是基本类型,但是有些时候和基本类型差不多,如String b = "tao" ; 可以对变量直接赋值,而不用 new 一个对象(当然也可以用 new).所以 ...

  6. 干货:嵌入式C语言源代码优化方案(非编译器优化)

    点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达! 1.选择合适的算法和数据结构 选择一种合适的数据结构很重要,如果在一堆随机存放的数中 ...

  7. C#编译器优化那点事

    使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的. 优化代码开关即optimize开 ...

  8. Java编译器优化与运行期优化技术浅析

    2019独角兽企业重金招聘Python工程师标准>>> 一.java编译器优化 1. JVM的编译器可以分为三个编译器:      1)  前端编译器:把.java转变为.class ...

  9. 模型压缩+编译器优化,使AI算法在移动端性能超越专用硬件

    作者 | 王言治,美国东北大学电子与计算机工程系助理教授 出品 | AI科技大本营(ID:rgznai100) 近年来,机器学习(Machine Learning)领域的研究和发展可谓是与日俱新,各式 ...

  10. 逆向知识第七讲,三目运算符在汇编中的表现形式,以及编译器优化方式

    一丶编译器优化方式 首先说一下编译器优化方式. 1.常量折叠 2.常量传播 3.复写传播 4.公共表达式 5.去掉不可达到分支 6.顺序代替分支 7.数学变化 8.代码外提 9.减少变量. 10 强度 ...

最新文章

  1. SpringBoot中访问静态资源
  2. axios请求接口http_Vue实战038:api接口模块化统一管理
  3. 一文了解结构体字节对齐
  4. 高级数据结构与算法 | LFU缓存机制(Least Frequently Used)
  5. 设置springboot日志级别_Spring Boot 日志框架实践
  6. Java 运算符、表达式、语句
  7. Spring Data JPA 从入门到精通~查询方法的创建
  8. 计算机磁盘分为硬盘和什么,fat32是什么?
  9. JS编程建议——32:使用制表
  10. 《基于模型的软件开发》——1.2 结构化开发
  11. linux根据进程名称,查看后台任务的运行目录
  12. linux 计算机概论 Linux介绍
  13. 三星安卓4.2手机微信字体缺陷:“兹崖幽噩弱器朋鹏网品晶磊弼” ttf 字体缺失,安卓 4.2.2 微信 6.5.4...
  14. BZOJ3309 DZY Loves Math(莫比乌斯反演+线性筛)
  15. django发送邮件结合itsdangerous+celery+redis
  16. python center用法_【语言学习】python——字符串
  17. OSError: cannot open resource
  18. Linux常用命令、相关软件安装及项目部署
  19. 1919 Problem A 二叉排序树
  20. 在此之前我不知道啥事JSON

热门文章

  1. phoneGap实际开发中的某些雷区
  2. 用C#实现图片数据库存储与显示
  3. mac mysql语句_Mac 下MySQL使用group by 语句报错解决方法
  4. std::kill_dependency
  5. JDK8高性能队列“Disruptor“
  6. malloc 源码_UE4源码剖析:MallocBinned(上)
  7. TODO算子-双Value类型的操作
  8. zip压缩文件暴力破解
  9. 春招你必须掌握的Python经典面试题(附赠简历模版)
  10. 机器学习之监督学习(一)——决策树