- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在游戏中很常见的是计算渲染最后一帧所花费的时间(增量时间)以产生平滑的运动、计时器等。
这样做的一种方法是声明 3 个全局变量:
float deltaTime, currentTime, elapsedTime;
然后在游戏循环开始时计算增量时间:
currentTime = getTime();
deltaTime = currentTime - elapsedTime;
elapsedTime = currentTime;
(其中 getTime() 是一个返回自程序启动以来的时间的函数)
另一种方法是将 deltaTime 和 currentTime 声明为局部变量:
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/
有人可以解释一下为什么我得到: "use of unassigned local variable number_of_column" for: if (i f.LastWriteTime).Fir
我正在尝试为查询定义和初始化 MySQL 变量。 我有以下几点: declare @countTotal int; SET @countTotal = select COUNT(*) from nG
局部变量由小写字母或下划线(_)开头.局部变量不像全局和实变量一样在初始化前含nil值. ruby>$foo nil ruby>@foo nil ruby>foo ER
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
当我单击 Login 类上的注册按钮时,出现 nullpointerException,它给出了该错误。我尝试修改本地和全局变量,但似乎没有任何方法可以修复该错误,我可能在 onClickListen
我之前看过一些关于此的帖子,但我一直无法找到有关 actionListeners 的帖子。我正在尝试使用 JButton 数组创建井字棋。如果可能的话,如何在使用 for 循环临时变量的同时向它们添加
我试图找出一种将 getView() 方法中的位置变量传递给内部类的方法。但是,这不能是最终变量,因为 ListView 中的每个项目都会调用 getView() ,因此它会发生变化。有没有办法访问该
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
这对你们中的某些人来说似乎微不足道,但我对下面的这两个示例感到困惑。 int[] numbers = new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; int i
这个问题在这里已经有了答案: How do JavaScript closures work? (86 个答案) 关闭 7 年前。 所以我正在复习我的 vanilla Javascript,专门用于
我正在将mockito与spring(java 1.8)一起使用,并且我尝试在我的Answer对象中使用局部变量: public IProductDTO productForMock = null;
是否可以在java中为静态方法注入(inject)局部变量,比如 @Inject public void someMethod() { @MyInjectQualifier MyObjectC
我有一个函数,每 2 秒被重复调用一次,每次从屏幕顶部带来一个具有随机纹理的球。我希望能够在 touchesBegan 中使用这个球,但我不能,因为它是一个局部变量。我试过将它设为全局变量,但这给了我
这是(我假设)一个基本问题,但我似乎无法弄清楚。 给定以下代码: from src.Globals import * import pygame # Used to manage how fast t
这就是我在循环中引用全局变量的方法。 _.forEach(myTableName.detailsObjects, function (o, key) { if
我已经创建了一些代码: import numpy as np Length=(2.7)*10**-3 Nx=4 x = np.linspace(0, Length, Nx+1) # mes
如何获取局部变量? 我有这个代码 if (ctrl is Control) { Control c = (Control)ctrl; foreach (object innerCtrl
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Difference between class variables and class instance
我正在学习 Python 3,我有一个关于 Python 中面向对象编程的非常基本的问题。这是我的代码。 class pet: number_of_legs = 0 def count
我有以下代码块: class Student{ int age; //instance variable String name; //instance varia
我是一名优秀的程序员,十分优秀!