【发布时间】:2013-12-19 05:41:01
【问题描述】:
是否有任何警告,让我们知道 NRVO/RVO 在 GCC 中是否执行?
我发现-fno-elide-constructors关闭了NRVO/RVO,但是NRVO/RVO有自己的条件发生,有时不发生。有必要知道 NRVO/RVO 是否发生,以便了解何时发生额外的复制构造。
我对编译时特性特别感兴趣。如果有一些特定的#pragma GCC...(它会在其自身之后立即激活诊断)或使用静态断言机制的东西,那就太好了。
【问题讨论】:
-
据我所知,编译器不会通知您这种优化,尤其是它们是否发生以及何时发生以及为什么发生,但有一些指导方针stackoverflow.com/questions/7320520/…
-
鉴于
-Winline等警告的存在,这很奇怪。 -
-Wdisabled-optimization什么都不给?然后你仍然可以查看-fdump-ipa-all的输出是否告诉你什么。 -
@Damon 如何检查
-Wdisabled-optimization是否可行?我无法使用-fdump-tree-nrv获取任何.nrv输出文件,而且似乎-fopt-info-nrv-missed/-fopt-info-missed-nrv不存在。 -
对我有用,它将
.nrv文件放在.o文件旁边——更大的挑战是阅读这些混乱,因为它们并不是非常人性化的文件。我自己只使用过-Wdisabled-optimization一次或两次,因为“噪音”太烦人了,几乎没有什么好处。不过,当时它似乎工作得很好(就它的作用而言)。
标签: c++ gcc g++ copy-elision