导航:首页 > 源码编译 > 编译器优化

编译器优化

发布时间:2022-02-06 20:40:46

A. 怎么指定某段代码不被编译器优化掉

在C语言中, 某些语句,如:
int a;
a = 0;
a = 1;
a =2; 这个可能编译器会把前面两句给优惠掉, 这个如果 前面两句也是必须要执行的, 可以把 int a 改成 volatile int a。
在编译的时候, 编译器可能会预测到某个变量的值, 就把中间的没有必要的语句给优化掉,volatile 关键字就是告诉编译器,不要做这样的预测性优化, 按照文本代码来翻译。

B. 编译器 优化

编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。然而,也存在从低阶语言到高阶语言的编译器,这类编译器中用来从由高阶语言生成的低阶语言代码重新生成高阶语言代码的又被叫做反编译器。也有从一种高阶语言生成另一种高阶语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。
典型的编译器输出是由包含入口点的名字和地址, 以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。
从他的原理我们就好优化了,但是方法很多的

C. 这是VS2010编译器优化吗怎么改

这个问题比较深, 所以只有哥来回答你了。

你说的问题在VS2008上也是相同的表现,这个是因为微软的库实现不是直接实现在你call的generate_n这个函数上的,而是有好几重转调,所以造成你即使对第一重调用的 模板函数用 引用去实例化,由于后面转调的函数都是使用值去实例化的,所以实际你得到的运行效果还是值语义的。

比如你call 函数 func1<A&>(), 但是由于func1<A&>() 调用了func2<A>(), 又继续调用了func3<A>(), 最后func3里操作的其实是一个值拷贝,所以影响不到外面的引用的对象。

哥去 微软报了个bug,里面写得比较细,你可以仔细看,http://connect.microsoft.com/VisualStudio/feedback/details/676282/vs-2010-sp1-doesnt-conform-to-the-c-standard-library-a-tutorial-and-reference

D. 如何使用ccs c编译器中的优化选项

CCS3.3既支持c程序设计又支持C++,当你的源程序的文件后缀采用.c时,CCS用c编译器编译程序,当使用.cpp后缀时,用C++编译器。

E. 编译器的优化到底能够优化到什么程度

在不改变程序行为的前提下可以任意改写代码

F. 编译器的编译器优化

应用程序之所以复杂, 是由于它们具有处理多种问题以及相关数据集的能力。实际上, 一个复杂的应用程序就象许多不同功能的应用程序“ 粘贴” 在一起。源文件中大部分复杂性来自于处理初始化和问题设置代码。这些文件虽然通常占源文件的很大一部分, 具有很大难度, 但基本上不花费C PU 执行周期。
尽管存在上述情况, 大多数Makefile文件只有一套编译器选项来编译项目中所有的文件。因此, 标准的优化方法只是简单地提升优化选项的强度, 一般从O 2 到O 3。这样一来, 就需要投人大量 精力来调试, 以确定哪些文件不能被优化, 并为这些文件建立特殊的make规则。
一个更简单但更有效的方法是通过一个性能分析器, 来运行最初的代码, 为那些占用了85 一95 % CPU 的源文件生成一个列表。通常情况下, 这些文件大约只占所有文件的1%。如果开发人员立刻为每一个列表中的文件建立其各自的规则, 则会处于更灵活有效的位置。这样一来改变优化只会引起一小部分文件被重新编译。进而,由于时间不会浪费在优化不费时的函数上, 重编译全部文件将会大大地加快。

G. 被编译器优化掉 是什么意思

没听说过,难道是注释和空行之类的,在源代码被编译成exe程序时,直接被去掉了,被称为优化掉?

H. 如何防止因编译器开启优化,而导致程序执行错误

我的经验是:未优化的c程序可正常运行,优化后不能运行,那一定是我的程序有问题。我还没经历过不是我程序的情况。
发现这种不易发现的问题,需要看汇编码。
避免的方法,我的经验:写c程序,尽量规矩;似是而非的概念,一定要搞清楚,别侥幸。因为侥幸而留的雷,现在不出问题,将来一定会出问题;不优化不出问题,优化就出问题。
最后要说,每个应用程序,都让他开优化运行,只要时间允许,一定要查出开优化后出问题的原因。时间不允许,只能不开优化凑合着,在有时间的时候继续查问题。

I. 如何在编译java的时候,取消编译器对编译常量的优化

遇到的问题是想重新编译某个java文件(比如A.java),里面有个常量(比如finalinta)和上次编译时不一样,但是另一个使用A.class的a的文件(比如B.java)由于在javac在上次编译的时候将当时的A.class里面的常量直接给内联了,所以就达不到想要的效果。
如果是这样的话,对于String可以使用.intern()来防止编译器进行优化,对于其他类型,可以要么不定义为常量,要么将常量定义为private,然后使用一个static方法来返回这个常量。

J. 编译器优化怎么定义

常见的优化和变新有:函数内嵌(inlining),无用代码删除(Dead code elimination),标准化循环结构(loop normalization),循环体展开(loop unrolling),循环体合并,分裂(loop fusion,loop fission),数组填充(array padding),等等。 优化和变形的目的是减少代码的长度,提高内存(memory),缓存(cache)的使用率,减少读写磁盘,访问网络数据的频率。更高级的优化甚至可以把序列化的代码(serial code)变成并行运算,多线程的代码(parallelized,multi-threaded code)。

机器代码的生成是优化变型后的中间代码转换成机器指令的过程。现代编译器主要采用生成汇编代码(assembly code)策略,而不直接生成二进制的目标代码(binary object code)。即使在代码生成阶段,高级编译器仍然要做很多分析,优化,变形工作。例如如何分配寄存器(register allocatioin),如何选择合适的机器指令,如何合并几句代码成一句等等。

阅读全文

与编译器优化相关的资料

热点内容
安卓手机如何打开eng文件 浏览:22
看拉丁电视都用什么app好 浏览:778
什么是哲学pdf 浏览:507
hdfs的三个下载命令 浏览:522
java常用的排序算法 浏览:357
51单片机连接adc 浏览:859
python命名变量报错 浏览:120
安卓手机如何换windows系统 浏览:612
python中的类是什么 浏览:630
我的英雄学院用哪个app可以看 浏览:35
excel插入选项卡对象命令 浏览:693
python字符全排列 浏览:505
824页大瓜文件pdf 浏览:222
朔州ios源码 浏览:251
算法逻辑电路 浏览:941
青少年喝酒解压辩论赛 浏览:175
android如何新建activity 浏览:741
ntp支持的认证算法 浏览:716
想做快手主播需要什么app 浏览:926
阿里云服务器如何转账户 浏览:905