MSVC - 检查函数是否实际内联的任何方法?

时间:2009-12-14 19:34:05

标签: c++ visual-c++

我必须检查编译器是否正在内联函数。有没有办法这样做而不看组件(我不读)。我没有选择搞清楚这一点,所以如果我们不能讨论这样做的智慧,我更愿意。谢谢!

5 个答案:

答案 0 :(得分:6)

如果启用警告C4714,C4710和C4711,它应该为您提供有关哪些功能是内联的内容的详细信息。

答案 1 :(得分:5)

每个呼叫站点可能有所不同。

编译器可能会决定某些父方法值得内联,而其他父方法则不值得内联。因此,如果不检查每个呼叫站点的汇编,您实际上无法确定真正的答案。

因此,您使用的任何工具都可能会给您一个误导性的答案。如果你使用一个工具检查符号的存在(它可能在那里,因为一些呼叫站点需要它,但可能它可能在其他人内联)。相反,缺少符号并不意味着方法/函数没有内联它可能是静态的(如在文件静态中),因此编译器不需要保持符号(但它没有内联)。

答案 2 :(得分:2)

使用/ FAs编译器选项转储带源代码的asm是我所知道的唯一方法。

注意:如果要强制函数内联,只需使用__forceinline

答案 3 :(得分:1)

生成“MAP”文件。这将为您提供所有非内联函数的地址。如果您的函数出现在此列表中,则不会内联,否则它将被内联或完全优化(例如,当它根本没有被调用时)。

答案 4 :(得分:0)

如果您真的不想跳转到程序集,请将该函数声明为__forceinline,如果可执行文件变大,则表示它没有内联。