在使用现代C ++编译器(包括MSVC,GCC,ICC)时,我怎么说它是否有:

  1. 并行化代码
  2. 矢量化循环(或使用其他特定的处理器指令)
  3. 展开循环
  4. 检测到尾递归
  5. 执行RVO(返回值优化)
  6. 或以其他方式优化

没有深入编译器产生的汇编代码?

===============>>#1 票数:18 已采纳

您可以真正判断的唯一方法是检查汇编器输出(您似乎已打折)。 除此之外,您可以阅读doco以了解编译器的每个级别提供的优化类型。

但是,老实说,如果你不相信你的编译器的优化级别正在完成工作,你可能不会相信doco :-)

我自己会看看汇编程序,这是你真正确定的唯一方法。

===============>>#2 票数:3

Intel编译器具有良好的报告功能。 在参考文档或手册页中查找-vec-report和-par-report。

g ++也有矢量报告,在man页面查看“vector”,我不认为g ++有并行自动代码生成。

至于最后三件事,我不认为编译器报告这一点,所以你可能不得不去汇编来获取这些信息

===============>>#3 票数:0

对于RVO或其他复制内容,只需在您的班级的copy-ctor和dtor中添加一些日志记录(printf)。 如果优化正在运行,您应该看到更少的对象被复制。

===============>>#4 票数:0

我很确定如果你在编译器中使用最深度优化,代码将被并行化,循环将被矢量化,许多其他矢量化技术也将起作用。

为了使用这么多深度,请在运行代码时使用-O3命令。

  ask by Andrew T translate from so

未解决问题?本站智能推荐:

7回复

c ++:编译器能否优化此代码段?

对于外循环的每次执行,都检查“常量”的值。 但是,常量永远不会改变,所以浪费了大量的CPU时间来测试条件常数<10? 一遍又一遍地。 人类会在前几次传球后意识到常数永远不变,并且智能地避免一遍又一遍地检查它。 编译器是否注意到这一点并对其进行智能优化,或者重复if循环是否不可避免
3回复

C ++:编译器以多种方式优化我们的代码?

。 我想知道编译器可以/可以优化我们用C ++编写的代码的所有可能方法(或至少是流行的方法)? 我也想知道优化是如何完成的(在每种情况下)! 到目前为止,我知道两个优化,即。 空基优化(EBO)和返回值优化(RVO)。 还有什么? 我听说过“ const”优化,“未使用变量”
3回复

编译器如何优化我们的代码? [关闭]

当我回答另一个人的问题时,我遇到了这个问题。 编译器如何优化代码? const,...等关键字可以帮忙吗? 除了挥发性和内联函数以及如何通过自己优化代码之外的事实!
3回复

C ++编译器是否消除了赋值重复?

如果我有一个示例函数,如: 哪个调用内联函数: 我应该关心“m_isValid = false”重复还是编译器通过优化来消除它们?
2回复

如何提示Visual C ++编译器优化器不能执行if语句的特定分支?

我们有一个用于错误检查的宏,如下所示: 通常条件必须为true ,我们希望CPU分支预测始终选择此路径,如果它恰好是false我们并不真正关心错误预测 - 抛出异常和大量堆栈展开会花费成本无论如何,财富。 根据CPU硬核描述,分支预测将稍微不同地处理向前跳转和向后跳转(总是执行向后
7回复

提示编译器帮助其完成优化任务

“生存发行版”文章中的const和volatile一章使我想到了编译器可以使用const关键字作为其优化工作的提示。 您是否了解编译器的其他优化提示或函数的设计原理,以便编译器可以内联? 顺便说一句,您是否将原始类型的函数参数声明为const或const引用(例如void foo(c
2回复

如果在这些写入之后没有代码,为什么C ++编译器只会消除无用的写入?

我正在检查Visual C ++ 10优化功能,并发现了一个相当奇怪的事情。 这里的所有代码都是用/ O2编译的。 在以下代码中: 在return之前调用memset()从机器代码中消除(我检查反汇编)。 这是完全合理的 - 如果之后没有从buffer读取,则memset()是
2回复

C ++标准对间接运算符保证内存写入的描述是不是已经优化了?

这基本上是这个问题的延续。 到目前为止看起来如果我有这样的函数: 并称之为: 然后,因为buffer没有声明为volatile,所以使用指向volatile的指针并不重要 - 数据本身不是易失性的,因此写入变量不构成可观察行为(1.9 / 6)并允许编译器优化它们远。 但
5回复

是否有可能保证在C ++中没有优化代码执行内存写入?

允许C ++编译器优化写入内存 : 处理敏感数据时,典型方法是使用volatile*指针来确保编译器发出内存写入。 以下是Visual C ++运行时库中的SecureZeroMemory()函数的实现方式(WinNT.h): 该函数将传递的指针强制转换为volatile*指针
5回复

Delphi编译器是否执行优化?

我正在使用Delphi 7 IDE。 Delphi编译器是否像在下面的链接中C ++编译器所做的那样优化代码? http://msdn.microsoft.com/zh-CN/library/aa366877(VS.85).aspx 如果在此示例中调用了ZeroMemory而不是