在使用现代C++编译器(包括MSVC、GCC、ICC)时,我怎么说它有:
无需深入研究编译器生成的汇编代码?
你能真正判断的唯一方法是检查汇编器输出(你似乎已经低估了)。除此之外,您可以阅读文档以了解编译器的每个级别提供哪些类型的优化。
但是,老实说,如果您不相信编译器的优化级别正在完成这项工作,您可能不会信任 doco :-)
我会亲自查看汇编程序,这是你真正确定的唯一方法。
英特尔编译器具有不错的报告功能。在参考文档或手册页中查找 -vec-report 和 -par-report。
g++ 也有向量报告,请在手册页中查找“向量”,我不认为 g++ 具有并行自动代码生成功能。
就最后三件事而言,我认为编译器不会报告这一点,因此您可能必须转到汇编来获取该信息
对于 RVO 或其他复制省略的东西,只需将一些日志记录(printf)放入类的 copy-ctor 和 dtor 中即可。如果优化有效,您应该会看到更少的对象被复制。
我非常确定,如果您在编译器中使用最深度的优化,代码将被并行化,循环将被矢量化,许多其他矢量化技术也将起作用。
为了使用足够的深度,请在运行代码时使用 -O3 命令。