如何找出哪些函数没有内联

时间:2012-02-08 09:10:19

标签: c++ c gcc inline

有没有办法获得未在任何地方内联的函数列表?通过将选项传递给gcc或检查二进制文件?

编辑:我知道如何通过使用gcc的内置属性noinline明确要求函数不被内联。

4 个答案:

答案 0 :(得分:6)

-fdump-ipa-inline添加到编译器选项中。

grep文件yoursourcefile.inline,该文件在“考虑内联候选者”的目标文件旁边创建,以找出编译器认为内联的所有函数。

将文件格式化为“Inlined into”以找出编译器最终内联的所有函数
grep for“inline_failed:”如果您对编译器拒绝候选者的原因感兴趣(例如“调用不太可能,代码大小会增加”)。

答案 1 :(得分:3)

使用gcc的-fdump-tree-all并搜索转储文件“inline”。

答案 2 :(得分:0)

您可以在Unix / Linux中使用 nm command 来获取二进制符号列表。
如果函数未内联,则其符号名称将出现在二进制文件中。

答案 3 :(得分:0)

'inline'不是函数的属性,函数可以是内联的也可以是非内联的。当你调用一个函数时,编译器决定是否内联,如果有多个调用,编译器可以为不同的调用选择不同的选项。如果至少有一个非内联调用,该函数将出现在符号表中。如果它被导出,它也将出现在符号表中。

因此无法检查内联功能是否有内容,您只能通过逆向工程检查内联或不内联的特定呼叫。

相关问题