如何知道什么是优化是通过我的编译器自动完成

我正想通过这个链接将其优化,想知道我们如何才能知道什么是优化由特定的编译器完成。

就像做VC8.0转换if-else语句切换情况? 就是这样信息,请访问MSDN?

--------------解决方案-------------

由于每个人似乎都在告诉他不应该担心它的OP弯曲,有一些关于编译器优化(选项)非常有用,虽然没有具体的OP要求的)信息。

你必须找出你正在使用的标志,尤其是对MSVC和英特尔(GCC发布版本应该默认为-O2),但这里的链接:

  • GCC
  • MSVC
  • 英特尔

这大约是接近你会编译拆卸后的二进制文件之前得到。

这取决于您选择的编译器优化的水平。

你可以找到一个关于它的非常好的文章在这里

首先,如果优化了地方,那么你的程序应该更快一般。 之后,你可以检查的反汇编代码,找出哪些进行一种优化。

我不知道VC8.0任何东西,所以我不知道你将如何访问这些信息。 但是,如果你是一般感兴趣的各种最佳化的去,想尝试的,我建议你使用LLVM。 你可以看一下从默认的C前端产生的未优化,反汇编字节代码,然后运行各种优化工具越过它,看看效果是各一次。 因为它是一个更好的,抽象的汇编代码,它往往是比较容易弄清楚什么是优化衍生自的代码,什么是机器特定的优化。

就像做VC8.0转换if-else语句切换情况?

编译器不就神奇地改写你的源代码。 即使他们做到了,那能告诉你吗? 如果编译器编译成一个跳转表或多个比较操作你真正想知道的是。 任何反汇编器会告诉你。

为了澄清我的观点:编写的switch-case语句不necesseraly意味着会有二进制跳转表。 不需要担心这个是有编译器的整点。

相反,搞清楚哪些优化是由编译器一般做的,它可能是最好不要有这样的编译器特定的知识任何依赖。

相反,开始一个良好的设计和算法,写作(尽可能)可移植的代码,很容易理解。 然后分析代码,如果它过于缓慢,解决实际的热点。 编译器的优化是有用的毫无疑问的,但更好的是应用一些调查什么实际发生在代码中。 算法/设计改进,在源代码级别通常会帮助比优化的有无表现更像转化的if / else成的switch-case。

我不知道什么是“转换的if / else转/箱”的意思。 我的处理器没有硬件开关/案例指导。

典型的编译器有几种不同的方式来实现开关/箱。 一个众所周知的人使用一个跳转表,但是这仅是在适当完成。

对于的if / else,当然这是正常的编译器来分析执行流程的有向图。 希望,如果每个条件引用相同的变量编译器注意到,我希望编译器把条件句的等价形式一般以同样的方式。 但是,这不是我担心的。

IIRC,在海湾合作委员会的总政策是,在优化的回归是可以容忍的,只要优先改善的结果。 优化是复杂的,什么是“一般”一个很好的优化并不总是那么大。 加上完美的优化,编译器必须知道的东西也无法知道(例如输入什么它会在现实生活中遇到的)。

问题的关键是,除非你碰巧是一个编译器的开发,这确实是不值得知道太多关于具体的优化。 如果你依赖的东西进行了优化的由V8,特定的优化可能不会发生在V9或V​​10。

分类:C# 时间:2015-03-15 人气:0
本文关键词: C#
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.128 (s). 10 q(s)