变量声明在程序效率方面的重要性

时间:2013-06-11 03:29:39

标签: c++ performance variables

所以,假设我在这里有一个叫做“游戏”的课程。在我的例子中,其他方法,构造函数和析构函数完全被忽略,并且与我手头的问题不重要或无关。

// 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;
}

所以这是我的问题:手头有任何性能损失/收益吗?这也适用于我意识到的支架范围。但就性能而言,这是否会得到优化?是由编译器决定的吗?

4 个答案:

答案 0 :(得分:3)

由编译器来优化它。该函数可能会被内联,并且临时变量可能不会存储在寄存器以外的任何位置。

你在这里实际做的是“过早优化”,这是一种阴险的拖延形式,会阻止你实际编写你的游戏。先写下你的游戏,然后找出瓶颈。这不是其中之一。

答案 1 :(得分:2)

确定某些内容是否会影响性能的最佳方法是使用分析器检查它是否

在这种情况下,性能不会受到影响,因为以这种方式声明单个变量会占用琐碎的内存和CPU时间,但这是一个很好的做法 - 特别是作为游戏的开发者,性能就是一切 - 学习分析你自己的表现代码。

答案 2 :(得分:2)

空间效率明显存在明显(虽然微不足道)的劣势。速度效率明智,技术上第一个更有效率,但同样,它是如此微不足道无关紧要。这可能很重要的唯一情况是 - 如果你有 -

bool running = game.isRunning();

loop(...){
    if(running);
}

在这种情况下,存储变量会以一种潜在的显着方式提高效率(特别是如果isRunning变为更复杂的函数)。

答案 3 :(得分:1)

该函数在您的类的声明中定义,因此它隐式inline,并且包含您的标题在内的任何内容都可以看到该定义。大多数现代编译器都会在优化开启的情况下做正确的事情。

但是,如果您要将Game::isRunning()的实现拉入单独的翻译单元(想想“源文件”),那么每次调用isRunning()都会遇到函数调用开销。这是否重要是一个不同的故事。

另请注意,某些编译器的某些配置不会使用isRunning()成员函数优化代码,因为并非所有内容都在内联后发生。你几乎肯定不应该担心这一点。