在使用现代C ++编译器(包括MSVC,GCC,ICC)时,我怎么说它是否有:
没有深入编译器产生的汇编代码?
答案 0 :(得分:18)
真正告诉的唯一方法是检查汇编程序输出(您似乎已打折)。除此之外,您可以阅读doco以了解编译器的每个级别提供的优化类型。
但是,老实说,如果你不相信编译器的优化级别正在完成工作,你可能不会相信doco: - )
我自己会看看汇编程序,这是你真正确定的唯一方法。
答案 1 :(得分:3)
英特尔编译器具有良好的报告功能。在参考文档或手册页中查找-vec-report和-par-report。
g ++也有矢量报告,在man页面查看“vector”,我不认为g ++有并行自动代码生成。
至于最后三件事,我不认为编译器报告这一点,所以你可能不得不去汇编来获取这些信息
答案 2 :(得分:0)
对于RVO或其他复制内容,只需在您的班级的copy-ctor和dtor中添加一些日志记录(printf)。如果优化有效,您应该会看到更少的对象被复制。
答案 3 :(得分:0)
我很确定如果你在编译器中使用最深度优化,代码将被并行化,循环将被矢量化,许多其他矢量化技术也将起作用。
为了使用这么多深度,请在运行代码时使用-O3命令。