如何从GCC /铿锵声组件输出中消除“噪音”?
我想检查boost::variant
在我的代码中应用的程序集输出,以便查看哪些中间调用被优化掉了。
当我编译以下示例(使用GCC 5.3 g++ -O3 -std=c++14 -S
)时,似乎编译器优化了所有内容并直接返回100:
(...)main:.LFB9320: .cfi_startproc movl $100, %eax ret .cfi_endproc(...)
#include <boost/variant.hpp>struct Foo{ int get() { return 100; }};struct Bar{ int get() { return 999; }};using Variant = boost::variant<Foo, Bar>;int run(Variant v){ return boost::apply_visitor([](auto& x){return x.get();}, v);}int main(){ Foo f; return run(f);}
但是,完整的程序集输出包含的内容远远超过上面的摘录,对我而言,它看起来永远不会被调用。有没有办法告诉GCC / clang删除所有“噪音”并输出程序运行时实际调用的内容?