gpt4 book ai didi

c++ - 全局变量还是局部变量更有效?

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:04 25 4
gpt4 key购买 nike

在游戏中很常见的是计算渲染最后一帧所花费的时间(增量时间)以产生平滑的运动、计时器等。

这样做的一种方法是声明 3 个全局变量:

float deltaTime, currentTime, elapsedTime;

然后在游戏循环开始时计算增量时间:

currentTime = getTime();
deltaTime = currentTime - elapsedTime;
elapsedTime = currentTime;

(其中 getTime() 是一个返回自程序启动以来的时间的函数)

另一种方法是将 deltaTimecurrentTime 声明为局部变量:

float currentTime = glfwGetTime();
float deltaTime = currentTime - elapsedTime;
elapsedTime = currentTime;

如果我的理解是正确的,那么编译器必须在循环结束时释放变量的内存,并在循环的下一次迭代中再次重新分配它,这导致它比仅仅声明效率更低全局变量。

这是正确的还是在后台自动发生了一些我不知道的其他事情?

最佳答案

If my understanding is correct, the compiler then has to deallocate the memory of the variables at the end of the loop and, in the next iteration of the loop, reallocate it all over again causing it to be more inefficient than just declaring global variables.

这不是真的。

编译器不会为循环中的局部变量分配和释放内存。函数中用于局部变量的内存通常在创建函数的堆栈帧时分配。

变量在循环的每次运行中被初始化。

如果变量是具有构造函数和析构函数的类类型,它们将在循环的每次运行中被调用,这可能会很昂贵,具体取决于构造函数和析构函数中发生的情况,循环次数跑。

对于 float 类型,不应该因为在循环中使用局部变量而产生任何开销。如果有的话,我会感到非常惊讶。

关于c++ - 全局变量还是局部变量更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39045899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com