C++内联在一个单例中被忽略,并显示在我的探查器中.怎么会
C++ _inline is being ignored in a singleton and showing up in my profiler. How come?
我的项目中有很多类都是由这样的单例访问的:
_inline GUI_BS_Map* GUI_GetBS_Map()
{
static GUI_BS_Map obj;
return &obj;
};
据我所知,这段代码应该是内联的。我将Visual Studio(2005)选项设置为内联任何合适的选项,并且我的探查器(AQTime)绝对没有设置为覆盖_inlines。然而,当我评测代码时,它们对我的每个单例函数都有成千上万的调用。我会错过什么?(我正在评测一个调试构建(为评测器获取符号),但所有的速度优化都已打开。)非常感谢您的任何建议!
编译器可以自由忽略inline
和_inline
。在Visual C++中,您可以尝试使编译器内联函数的__forceinline
,除非有严重的原因不这样做(这些原因在链接的MSDN文章中列出)。
内联只是对编译器的一个建议。它可能会忽略您的建议,甚至忽略您尚未标记为内联的内联函数。
我建议尝试将本地静态移到函数之外,重新编译并再次调试,以检查是否看到行为发生了变化。尝试将此函数与本地静态函数内联似乎是一个问题。
inline
是一个语义含义-你不能强迫编译器实际内联任何东西,它是一个实现细节,它可以嘲笑你,并在任何时候拒绝它。
如前所述,编译器可以自由忽略内联。
在Debug中构建以帮助调试时,也更有可能忽略任何内联调用(因此内联函数中的断点会被正确地钩住等等)
不过,我建议不要对调试版本进行评测(如果你可以避免的话),因为VS编译器在调试和发布之间的工作方式非常不同,你可能会得到错误的结果。。。。。
首先,C++有一个inline
关键字,但没有_inline
。_inline
是宏吗?编译器特定的扩展?与你的档案相关的东西?
其次,C++编译器通常会内联它喜欢的任何内容,而inline
关键字充其量是,这表明您希望看到该函数内联。
如今,inline
关键字的主要目的与其说是启用内联优化(无论你是否告诉它,编译器都会非常积极地应用它),不如说是抑制一个定义规则(ODR),这样就可以在头中完全定义函数,而不会有链接器出现多个定义错误的风险。
- 为什么我的程序不能显示斐波那契级数?
- 为什么我的 cout 在输出中没有显示字符串?
- 为什么在为其分配编号后无法显示我的字符串值?
- 你能帮我解决显示矩阵的问题吗?
- 我的期末考试遇到了麻烦.代码不断循环回到我的订购菜单,不会显示我的总价
- 如何重载运算符<<显示我的列表
- 为什么我无法显示我的链表?
- 为什么我的代码不显示我的 TButton 数组?
- 我如何显示我的字符串
- 如何在printf中显示我的源代码的行号
- 如何在Qt客户端应用程序中显示我的OSM磁贴
- 类,显示我的最终结果C++时出现问题
- 需要有关使用 for 循环显示我的数组的帮助
- 有没有一种方法可以在两列中显示我的素数列表输出
- 如何显示我的 Queue & Stack?
- 如何使用 OPENCV 显示我的代码中的图像
- 无法显示我的每个函数的结果
- 我如何让Anjuta突出显示我的构建系统(waf)产生的错误/行
- 如何在 GUI 输出窗口而不是 Visual Studio 2015 中的 cmd 控制台上显示我的C++程序输出
- 为什么 OpenGL 不显示我的火粒子