变量声明对程序效率的重要性
The importance of variable declaration in relation to program efficiency
假设这里有一个类叫做Game。其他方法、构造函数和析构函数在我的例子中完全被忽略了,它们对我手头的问题不重要或不相关。
// Game.hpp
#pragma once
class Game {
public:
...
bool isRunning() { return mRunning; } // See: mRunning
...
private:
bool mRunning; // Holds if the game is running or not
};
很简单,对吧?这里是我关注的地方:
// main.cpp
#include "Game.hpp"
int main(int argc, char* argv[]) {
Game game;
if (game.isRunning()) {
...
}
return EXIT_SUCCESS;
}
这两者的区别是什么?:
// main.cpp
#include "Game.hpp"
int main(int argc, char* argv[]) {
Game game;
bool running = game.isRunning();
if (running) {
...
}
return EXIT_SUCCESS;
}
所以我的问题是:是否有任何性能损失/增益?我意识到这也适用于括号作用域。但是在性能方面,它得到优化了吗?这取决于编译器吗?
这取决于编译器来优化。函数可能是内联的,临时变量可能不会存储在寄存器之外的任何地方。
你在这里所做的其实是"过早优化",这是一种潜在的拖延形式,会阻止你真正编写游戏。首先编写你的游戏,然后找到瓶颈。这不会是其中之一
确定某事是否会影响性能的最佳方法是使用分析器检查它是否会。
在这种情况下,性能不会受到影响,因为以这种方式声明单个变量使用了微不足道的内存和CPU时间,但这是一个很好的实践-特别是作为游戏开发人员,性能就是一切-学习分析自己的代码的性能。
空间效率方面有一个明显的(尽管微不足道的)缺点。速度效率方面,从技术上讲,第一种方法更有效,但同样,这是微不足道的,无关紧要。只有在-
bool running = game.isRunning();
loop(...){
if(running);
}
在这种情况下,存储变量将以一种潜在的显著方式提高效率(特别是当isRunning成为一个更复杂的函数时)。
该函数是在类的声明中定义的,因此它是隐式的inline
,该定义对包括头文件在内的任何内容都是可见的。大多数现代编译器在打开优化后,会在这里做正确的事情。
但是,如果您要将Game::isRunning()
的实现拉到单独的翻译单元(例如"源文件")中,则每次调用isRunning()
时都会遭受函数调用开销。至于这是否重要,那就是另一回事了。
还请注意,某些编译器的某些配置将不能很好地优化isRunning()
成员函数的代码,因为并不是所有的事情都发生在内联之后。你几乎不应该担心这个
- 为什么当我解模块化时,这个C++代代码"效率较低"?
- 代码的效率. 转到和函数调用
- 对于循环C++可能效率低下
- 内存效率表示最短路径的方法?
- 如何提高该函数的运行效率?
- 效率:标准::数组与标准::矢量
- 如何提高BST的搜索操作效率?
- 字符串引用参数的效率C++
- 提高基于组件的游戏引擎的效率
- 在 c++ 中使用带有映射的插入效率
- 关于效率的问题
- 在SQLITE数据库中写入记录需要花费大量时间.如何提高刀片操作效率?
- 寻求提高Microsoft密封库计算效率的方法
- 做对了一个类似竞争的问题,但需要帮助来提高效率
- C++类 公共和私人领域的重要性
- C++ - 与 Numpy 中的矢量版本相比,Argsort 效率低的矢量版本实现
- C++,在对象内分配多个数据时,堆栈分配是否更有效? 在下面的程序中,类A_Heap的效率会更低吗?
- visual C++|循环效率
- 我创建了一个库,想知道设计是否效率低下
- 变量声明对程序效率的重要性