编译器优化级别怎么设置
1. 编译器 优化
编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。然而,也存在从低阶语言到高阶语言的编译器,这类编译器中用来从由高阶语言生成的低阶语言代码重新生成高阶语言代码的又被叫做反编译器。也有从一种高阶语言生成另一种高阶语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。
典型的编译器输出是由包含入口点的名字和地址, 以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。
从他的原理我们就好优化了,但是方法很多的
2. 如何开启C++编译器优化
如果是Visual Studio,可在工程配置中设置。如果是g++,可以用编译选项-O2。
3. keil c51优化等级介绍
一般用优化等级8,其它的别用,容易出事。
编译完之后多留意data,xdata,看有没超出芯片的最大值,
特别是data,不能超过128,甚至太接近128有时也会出问题。
如果data 需要使用到256,则另外的128用idata定义
4. 编译器的编译器优化
应用程序之所以复杂, 是由于它们具有处理多种问题以及相关数据集的能力。实际上, 一个复杂的应用程序就象许多不同功能的应用程序“ 粘贴” 在一起。源文件中大部分复杂性来自于处理初始化和问题设置代码。这些文件虽然通常占源文件的很大一部分, 具有很大难度, 但基本上不花费C PU 执行周期。
尽管存在上述情况, 大多数Makefile文件只有一套编译器选项来编译项目中所有的文件。因此, 标准的优化方法只是简单地提升优化选项的强度, 一般从O 2 到O 3。这样一来, 就需要投人大量 精力来调试, 以确定哪些文件不能被优化, 并为这些文件建立特殊的make规则。
一个更简单但更有效的方法是通过一个性能分析器, 来运行最初的代码, 为那些占用了85 一95 % CPU 的源文件生成一个列表。通常情况下, 这些文件大约只占所有文件的1%。如果开发人员立刻为每一个列表中的文件建立其各自的规则, 则会处于更灵活有效的位置。这样一来改变优化只会引起一小部分文件被重新编译。进而,由于时间不会浪费在优化不费时的函数上, 重编译全部文件将会大大地加快。
5. ICCAVR里怎么设置优化等级
题目太模糊,优化通常指编译优化,尽管优化可以节约程序资源或者提高速度,但随着器件的资源越来越丰富,不建议选择优化,因为优化可能导致未知错误(其实是编译器的BUG)。
6. 高手们来看看VS2010 中编译器设置都是什么意思(其实VS2008也差不多吧),谁能详细的给说一下,万分感谢了
这是C/C++编译优化设置部分
第一行,启用的优化等级,这里优化被禁止了
第二行,内联函数,表示是否展开,还是以函数形式存在
第三行,是否启用内部函数
使用内部函数的代码比较快,因为它们没有函数调用的系统开销。但由于创建了附
加代码,代码尺寸可能比较大。
第四行,优化方式,速度优先还是代码尺寸优先;通常会选择速度优先,现在尺寸已不是问题
第五行,是否禁止在调用堆上创建框架指针,以加快函数调用;堆内存分配算法需要时间
第六行,是否启用纤程安全的线程本地存储优化
第七行,是否启用全局链接时代码优化;指的是生成具体指令过程推迟到链接的时候,这样有
助于具体的一些优化,比如,函数内部变量,有些可以是寄存器变量,没必要再
栈里分配,寄存器访问比内存访问快很多,这些都依赖于函数的调用拓扑等关系。
7. Keil优化及如何设置某段代码不优化
Keil默认会对代码进行优化的
一般情况缺省编译优化设置被设定为8级优化,实际最高可设定为9级优化。
1、Dead code elimination
2、Data overlaying
3、Peephole optimization
4、Register variables
5、Common subexpression elimination
6、Loop rotation
7、Extended Index Access Optimizing
8、Reuse Common Entry Code
9、Common Block Subroutines
如何设定不优化或改变某个文件的优化设置
1、针对某个文件
(1) 右键->Option for File XXXX
(2) 切换到【C51】选项卡
default表示与工程设置一致
2、针对某段代码(局部优化)
#pragma OPTIMIZE(x) x就是你希望的优化级别
举例如下:
#pragma OPTIMIZE(6)
void FunA()
{
}
......
......
#pragma OPTIMIZE(9)
void FunB()
{
}
上面的意思就是说,在void FunA()到void FunB()之前的所有函数,包括FunA在内,都采用6级的优化,而从FunB开始直到之后,只要没碰上#pragma OPTIMIZE,都采用9级优化了。
OPTIMIZE还可以多一个参数,就是speed和size,
用法: #pragma OPTIMIZE(9,speed)或#pragma OPTIMIZE(5,size)
对应的就是9级优化,以速度为主,或5级优化,以空间最小为主。
8. VC编译器中“优选大小或速度”和“优化”选项的设置区别在哪里
VC中的优化里面的 按大小优化 与 按速度优化 是分开选的,不能同时选择两者
9. 如何设置iar优化等级
果在A行设置的断点,单步调试的时候却只能到达A后边的某几行,可能的一个原因就是代码优化的等级太高了,导致编译器实际上没有在A行停顿。
解决办法:
在OPTION下修改优化等级
IAR默认的是最高优化等级。如果程序不大建议不优化。如果优化等级高,那么一些非汇编的延时函数可能无法执行,一些局部变量的值可能在使用过后,即便没有离开自己的作用
10. Qt Creator里如何设置gcc编译的优化等级
不是release优化的问题。如果是直接运行的话,mingwm10.dll、libgcc_s_dw2-1.dll、qtcore4.dll、qtgui4.dll,还有相应的你用到的库都要放在运行目录下,用dependency walker可以看到dll依赖情况。
然后用到的插件比如qmltooling、imageformats等目录也需要拷到运行目录中,这个用工具看不到依赖,只能全拷然后用排除法,有经验之后代码里哪些用到了就知道了。
出现runtime library错误的最大可能性就是运行目录下的插件不完整。
另外有一种解决方法就是把qt改成静态链接,编译进exe,商业版允许这样做,lgpl版的话如果不是自用就有法律风险。