堆栈(重新)创建时的性能差异
Performance difference at stack (re)creating?
与
之间是否存在性能差异?int test;
void Update()
{
test +=2;
}
和this:
void Update()
{
int test;
test +=2;
}
,
int main()
{
while(true)
Update();
}
我问,因为第二段代码更好读(你不需要在类头声明它),所以我会使用它,如果性能不低。
这两个代码片段之间不太可能存在性能差异,只有对代码进行分析才能可靠地分辨出来,但是这里有一个重要的功能差异,您应该在这里考虑。
如果test
变量只在函数update()
中需要,那么必须在函数中声明它。这样,变量在函数内部的作用域是有限的。这种局部变量的生存期被限制在它所在的范围内。在函数体内,直到右括号}
。
如果你想让你的test
变量在函数调用中保持状态,那么它可以是一个在函数内部声明的局部静态变量。
在函数外部声明test
使其成为全局变量。它可以在同一文件中的任何函数中访问。作为一个全局变量,它的生命周期一直延续到程序结束。
性能差异,不大可能。这很容易测试,但取决于您的编译器。检查输出组件并进行基准测试。如果有差别,也可能很小。
然而,有一个主要的功能差异。第二个例子实际上是无用的,因为test
每重置一次Update
。为了避免这种情况,您可以将其声明为static int test
,但实际上您又编写了第一个示例。
所以,它们是非常不同的东西,但会有相似的性能。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- OpenMP阵列性能较差
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- 递归列出所有目录中的C++与Python与Ruby的性能
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 如何在 DolphinDB 中使用 c plus plus API 提高创建表的性能
- 创建系统性能 Windows 10 应用(适用于商店)
- 堆栈(重新)创建时的性能差异