如果关闭了编译器优化(gcc-o0...),那么说'volatile'关键字没有区别是可以的吗?
我制作了一些示例“C”程序,并且仅当打开编译器优化时,才在生成的汇编代码中看到易失性和非易失性之间的区别,即((gcc-o1....)。
对于GCC4.7或更早版本,volatile
可能与gcc-o0
没有太大区别。但是,在下一个GCC版本中(即future 4.8,即当前主干),这可能会发生变化。并且下一个版本还将提供-og
以获得调试友好的优化。
在GCC4.7和更早的版本中,没有优化意味着从一个C指令(甚至Gimple,即GCC内部的内部表示)到下一个指令的值并不总是保存在寄存器中。
此外,volatile
对于符合标准的编译器和人类都有特定的含义。例如,如果我读一些带有sig_atomic_t
变量的代码,而该变量不是volatile
的话,我会很不高兴!
问题内容: 假设我在C代码中有类似的内容。我知道您可以使用a 代替,以使编译器不对其进行编译,但是出于好奇,我问编译器是否也可以解决此问题。 我认为这对于Java编译器来说更为重要,因为它不支持。 问题答案: 在Java中,if内的代码甚至都不是已编译代码的一部分。它必须编译,但不会写入已编译的字节码。它实际上取决于编译器,但我不知道没有对它进行优化的编译器。规则在JLS中定义: 优化的编译器可能
问题内容: 我目前正在翻译中编写一个针对Java字节码的玩具编译器。 我想知道是否可以在编写.class文件之前在发出的字节码中进行各种简单的窥孔优化的目录,也许是摘要。我实际上知道一些具有此功能的库,但是我想自己实现。 问题答案: 您知道Proguard吗?http://proguard.sourceforge.net/ 这是一个很棒的字节码优化器,它实现了很多优化。请参阅常见问题解答以获取列表
本文向大家介绍C/C++ 编译器优化介绍,包括了C/C++ 编译器优化介绍的使用技巧和注意事项,需要的朋友参考一下 0. gcc -o gcc -o 的优化仍然是机械的,想当然的。只有做到深入理解计算机系统,加深对编程语言的理解,才能写出最优化的代码。 Linux下gcc 优化级别的介绍 · gcc -o0 ⇒ 不提供任何优化; · gcc -o1 ⇒ 最基本的优化,主要对代码的分支、表达式、
我应该启用哪些确切的gcc标志来获得此警告? 为什么将声明为volatile会抑制该警告?
如果我写 大多数C编译器是否足够聪明,能够将1或-1的乘法优化成更快的运算(无操作或求反)?
问题内容: Java编译器(即javac)在生成字节码时不会执行任何优化。是真的吗 如果是这样,那么它可以实现为中间代码生成器以消除冗余并生成最佳代码吗? 问题答案: 如果有的话,只会做很少的优化。 关键是JIT编译器完成了大部分优化工作-如果它具有很多信息,则效果最佳,如果执行优化,其中的一些信息也可能会丢失。如果执行某种形式的循环展开,那么JIT很难以一般的方式自行完成-而且,由于它了解目标平