C/C++ 编译器优化介绍
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++ 编译器优化介绍的全部内容,希望对大家有所帮助。欢迎各位参阅本站其他相关专题,有什么问题可以随时给我们留言,小编会及时回复大家的。
相关推荐
-
Microsoft VBScript 编译器错误 错误原因 代码大全
Microsoft VBScript 编译器错误 错误 '' 缺少语句 ActiveServerPages,ASP0126(0x80004005)-->找不到包含文件 MicrosoftOLEDBProviderforODBCDrivers(0x80040E21)-->sql语句出错(数据类型不匹配或表名(字段名)错误或表处于编辑状态,或表不存在于conn打开的数据库中) MicrosoftOLEDBProviderforODBCDrivers(0x80040E14)-->sql语句出错
-
Linux上安装GCC编译器过程
2004年4月20日最新版本的GCC编译器3.4.0发布了.目前,GCC可以用来编译C/C++.FORTRAN.JAVA.OBJC.ADA等语言的程序,可根据需要选择安装支持的语言.GCC 3.4.0比以前版本更好地支持了C++标准.本文以在Redhat Linux上安装GCC3.4.0为例,介绍了GCC的安装过程. 安装之前,系统中必须要有cc或者gcc等编译器,并且是可用的,或者用环境变量CC指定系统上的编译器.如果系统上没有编译器,不能安装源代码形式的GCC 3.4.0.如果是这种情况,可
-
C/C++编译器GCC下的常用编译命令总结
简介 GCC的意思是GUN C Compiler.经过了多年的发展,GCC已经不仅仅能支持C语言了,它现在还支持Ada语言.C++语言.Java语言.Objective C语言.Pascal语言.COBOL语言,以及支持函数式编程和逻辑编程的Mercury语言等等.而GCC也不再单只是GUN C语言编译器的意思了,而是变成了GUN Complier Collection也即是GUN编译器家族的意思了.另一方面,说到GCC对于操作系统平台以及硬件平台支持,概括起来就一句话:无所不在. 编译 示例程
-
Microsoft VBScript 编译器错误 错误 '800a03e9' 内存不够的解决方法
其实出现Microsoft VBScript 编译器错误 错误 '800a03e9' 内存不够的错误一般是由于访问量过大或攻击出现的,而iis进程回收还没有操作,所有我们手工回收一下就可以了. iis >应用程序池 > 找到对应网站的应用程序池 >右键 当然我们可以通过重启iis或重启服务器,在运行里面输入: iisreset /restart
-
C/C++ 编译器优化介绍
0. gcc -o gcc -o 的优化仍然是机械的,想当然的.只有做到深入理解计算机系统,加深对编程语言的理解,才能写出最优化的代码. Linux下gcc 优化级别的介绍 · gcc -o0 ⇒ 不提供任何优化: · gcc -o1 ⇒ 最基本的优化,主要对代码的分支.表达式.常量等进行优化,编译器会在较短的时间下将代码变得更加短小,这样体积就会变得更小,会减少内存的占用率,在操作系统进行内存调度时就会更快. · 但是事情没有绝对的优点,当一个庞大的程序被拆碎细分的话,内
-
企业生产MySQL优化介绍
与其他的大型数据库例如 Oracle.DB2.SQL Server等相比,MySQL 自有它的不足之处,但是这丝毫也没有减少它受欢迎的程度.对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于 MySQL是开放源码软件,因此可以大大降低总体拥有成本. 企业生产MySQL是如何优化的呢? 参考答案: a:硬件的优化: 1. 采用64位cpu,cpu至少4颗,L2缓存越大越好 2. 内存要大,32-64G运行1-2个实例,96-128G运行3-4个实例 3.
-
C#中尾递归的使用、优化及编译器优化
递归运用 一个函数直接或间接的调用自身,这个函数即可叫做递归函数. 递归主要功能是把问题转换成较小规模的子问题,以子问题的解去逐渐逼近最终结果. 递归最重要的是边界条件,这个边界是整个递归的终止条件. 复制代码 代码如下: static int RecFact(int x) { if (x == 0) return 1; return x * RecFact(x - 1); } RecFact(10); 上面是个经典阶乘函数的实现.这里分2步: 1.转换,把10的
-
详解C++编译器优化技术
前言 注1:vc6.vs没有提供编译选项来关闭该优化,无论是debug还是release都会进行RVO和复制省略优化 注2:vc6.vs2005以下及vs2005+ Debug上不支持NRVO优化,vs2005+ Release支持NRVO优化 注3:g++支持这三种优化,并且可通过编译选项:-fno-elide-constructors来关闭优化 RVO #include <stdio.h> class A { public: A() { printf("%p construct\
-
Linux高并发踩过的坑及性能优化介绍
目录 前言 Linux应用运行过程中出现Too many open files 问题分析和解决 Linux高并发下 time_wait 过多的问题分析及解决 Linux更多性能优化 小结 前言 Linux操作系统是现在服务器的首选操作系统,在Linux的默认系统参数下,Linux针对高并发的支持性并不是很好.小编从事Linux下应用程序开发多年,关于Linux系统下的高并发,小编自己踩过的坑,及如何解决踩过的坑下面列上几条,供大家参考,避免再次掉坑. Linux应用运行过程中出现Too many
-
Java冒泡排序及优化介绍
目录 什么是冒泡排序 思路分析 代码实现 结果输出 代码优化 优化后的结果输出 什么是冒泡排序 冒泡排序指重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从小到大)错误就把他们交换过来.走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名"冒泡排序". 思路分析 以{5,3,9,7
-
Android APP启动时间优化介绍
APP启动时间优化首先要知道入伙获取APP启动时间,可以看我的这篇文章:Android 获取APP启动时间 然后就是想办法降低启动时间 1.在Application的onCreate方法中将耗时信息生成一个文件 2.正常耗时文件需要申请读写权限 3.运行APP,可以找到生成的文件 3.将生成的文件直接拖到Android Studio中,可以显示分析的页面 4.分析找到耗时严重的方法 5.将耗时严重的方法放到线程池的线程里面异步执行 6.异步加载资源的时候要注意下面几点: 如果我们要加载的资源耗时
-
MySQL数据库性能优化介绍
目录 为什么做优化?? 从哪些方面入手?? 解决方案是什么??? 要怎样选择??? SQL优化 总结 为什么做优化?? 因为数据量太多了,项目部署上线再到用户使用,每天数据增长几十万条,给服务器带来非常大的负担,互联网一直追求高性能,可是随着业务规模变大,用户数量变多,服务器的性能越来越差,因此我们不得不对数据库有更高要求. 从哪些方面入手?? 第一,是查询的速度,我们期望数据量到达TB级别仍然能够实现百万级别查询速度. 第二.是并发量,我们对它的要求能够同时处理几千甚至上万的并发访问,还要配
-
Redis教程(十四):内存优化介绍
一.特殊编码: 自从Redis 2.2之后,很多数据类型都可以通过特殊编码的方式来进行存储空间的优化.其中,Hash.List和由Integer组成的Sets都可以通过该方式来优化存储结构,以便占用更少的空间,在有些情况下,可以省去9/10的空间. 这些特殊编码对于Redis的使用而言是完全透明的,事实上,它只是CPU和内存之间的一个交易而言.如果内存使用率方面高一些,那么在操作数据时消耗的CPU自然要多一些,反之亦然.在Redis中提供了一组配置参数用于设置与特殊编码相关的各种阈值,如
-
C++递归算法实例代码
递归算法,总结起来具有以下几个特点: 特点1 它有一个基本部分,即直接满足条件,输出 特点2 它有一个递归部分,即 通过改变基数(即n),来逐步使得n满足基本部分的条件,从而输出 特点3 在实现的过程中,它采用了分治法的思想: 即将整体分割成部分,并总是从最小的部分(基本部分)开始入手(输出),其背后的原理在于 当整体递归到部分时,会保留整体的信息,部分满足条件输出的结果会被回溯给整体使用,从而使得整体输出结果. 特点4 每一步操作,整体都会将部分当
随机推荐
- Ruby编程中的语法使用风格推荐
- 利用jQuery实现可输入搜索文字的下拉框
- Java中GC的工作原理详细介绍
- python实现将英文单词表示的数字转换成阿拉伯数字的方法
- ASP.NET 绑定DataSet中的多个表
- python实现通过pil模块对图片格式进行转换的方法
- Android仿新浪微博启动界面或登陆界面(1)
- PHP汉字转换拼音的函数代码
- JavaScript中的继承之类继承
- jQuery+css实现的蓝色水平二级导航菜单效果代码
- java中四种操作xml方式的比较
- IOS10 相册相机闪退bug解决办法
- 四种php中webservice实现的简单架构方法及实例
- 浅谈c#中config.exe 引发的一些问题
- javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
- android通过自定义toast实现悬浮通知效果的示例代码
- CentOS 7中升级MySQL 5.7.23的坑与解决方法
- 在dataframe两列日期相减并且得到具体的月数实例
- iOS内存管理中引用计数的学习
- 全面解析Java设计模式之单例模式