我必须检查编译器是否正在内联函数。有没有办法这样做而不看组件(我不读)。我没有选择搞清楚这一点,所以如果我们不能讨论这样做的智慧,我更愿意。谢谢!
答案 0 :(得分:6)
如果启用警告C4714,C4710和C4711,它应该为您提供有关哪些功能是内联的内容的详细信息。
答案 1 :(得分:5)
每个呼叫站点可能有所不同。
编译器可能会决定某些父方法值得内联,而其他父方法则不值得内联。因此,如果不检查每个呼叫站点的汇编,您实际上无法确定真正的答案。
因此,您使用的任何工具都可能会给您一个误导性的答案。如果你使用一个工具检查符号的存在(它可能在那里,因为一些呼叫站点需要它,但可能它可能在其他人内联)。相反,缺少符号并不意味着方法/函数没有内联它可能是静态的(如在文件静态中),因此编译器不需要保持符号(但它没有内联)。
答案 2 :(得分:2)
使用/ FAs编译器选项转储带源代码的asm是我所知道的唯一方法。
注意:如果要强制函数内联,只需使用__forceinline
。
答案 3 :(得分:1)
生成“MAP”文件。这将为您提供所有非内联函数的地址。如果您的函数出现在此列表中,则不会内联,否则它将被内联或完全优化(例如,当它根本没有被调用时)。
答案 4 :(得分:0)
如果您真的不想跳转到程序集,请将该函数声明为__forceinline,如果可执行文件变大,则表示它没有内联。