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

编译器优化

发布时间: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),如何选择合适的机器指令,如何合并几句代码成一句等等。

阅读全文

与编译器优化相关的资料

热点内容
cad输入命令时鼠标卡顿 浏览:793
php过滤文件 浏览:757
linux配置ip命令 浏览:903
命令的英文怎么读 浏览:353
哪个app是自己弹音乐的 浏览:655
安卓变是什么意思 浏览:612
qq五子棋在哪里找app 浏览:837
图片活码二维码生成器网站源码 浏览:186
国美手机联系人加密 浏览:883
成交量彩色源码 浏览:118
算法最根本的评价标准 浏览:366
个人资源app哪个好用 浏览:580
这也能切为什么没有安卓 浏览:675
可可64山寨源码 浏览:641
怎么自己解压和释放 浏览:991
思路与算法的区别 浏览:156
日志带源码 浏览:137
php怎么打包 浏览:758
大照丢了如何解压 浏览:654
路由器保存命令 浏览:129