Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有办法检查函数是否真的是内联的?_C++_Visual C++ - Fatal编程技术网

C++ 有没有办法检查函数是否真的是内联的?

C++ 有没有办法检查函数是否真的是内联的?,c++,visual-c++,C++,Visual C++,我必须检查编译器是否正在内联函数。有没有什么方法可以不用看汇编(我没有读过)。我别无选择,所以我宁愿我们不能讨论这样做的智慧。谢谢 每个呼叫站点可能不同 编译器可能会决定某些父方法是否值得内联,而其他父方法是否值得内联。因此,如果不检查每个调用站点上的汇编程序,就无法实际确定真正的答案 因此,您使用的任何工具都可能给您一个误导性的答案。如果您使用一个工具来检查符号的存在(它可能存在,因为某些呼叫站点需要它,但它可能在其他站点内联)。相反,缺少符号并不意味着方法/函数没有内联,它可能是静态的(如在

我必须检查编译器是否正在内联函数。有没有什么方法可以不用看汇编(我没有读过)。我别无选择,所以我宁愿我们不能讨论这样做的智慧。谢谢

每个呼叫站点可能不同

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


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

使用/FAs编译器选项将asm与源代码一起转储是我所知道的唯一确定的方法


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

如果确实不想跳转到汇编中,请将函数声明为u forceinline,如果可执行文件变大,则知道它没有内联。

如果启用警告C4714、C4710和C4711,它应该为您提供关于哪些函数是内联的、哪些函数不是内联的相当详细的信息。

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

不一定。例如,一个典型的成员get函数在内联时实际上可能会产生更小的代码。这将导致成员通过this指针访问,而不是推送this,调用函数,通过this访问成员,从函数返回。这是正确的,但如果它已经被内联了,\uu forceinline不应该改变任何东西,所以我应该说的是,如果可执行文件改变了大小。接得好。-1,问题是,由于理查德给出的原因,相反的说法是不正确的。如果可执行文件没有改变其大小,你能得出什么结论?\uuForceInline并不是在所有情况下都强制内联。