是否有性能增益或之前声明所有局部变量的其他原因?

时间:2015-02-21 02:58:16

标签: c# python c++ performance optimization

我在代码库和在线中也看到了很多这种风格,如果你有一个带有for循环和if语句的函数,那么只有它们使用的所有变量都没有在它们之外声明。例如:

void process()
{
    int i;
    int count = 100;
    vector3 point;
    vector sum;

    for (i = 0; i < count; ++i)
    {
        import(this, "pos", point);
        sum += point;
    }
    sum /= count;
}

或者这是不成熟的优化?我对C ++,C#和Python感到好奇,这些是我使用的语言,我一遍又一遍地看到它们。

3 个答案:

答案 0 :(得分:5)

许多旧代码都是这样做的,因为它在C89 / 90中是必需的。好吧,技术上,从来没有要求在函数的开头定义变量,只在的开头。例如:

int f() { 
    int x;   // allowed

    x = 1;
    int y;   // allowed in C++, but not C89

    {
       int z=0;    // beginning of new block, so allowed even in C89

       // code that uses `z` here
    }
}

C ++从来没有受过这种限制(而且C在很长一段时间内都没有),但是对于一些旧的习惯很难。对于其他人来说,保持代码库的一致性超过了定义接近他们使用位置的变量的好处。

就优化而言,这通常都不会产生任何影响。

答案 1 :(得分:1)

它在python中有所不同。这是一个范围问题,其中python将首先搜索包含局部变量的字典,然后向上移动到全局,然后内置。

python中的速度略有提升,但通常并不是很多。检查THIS问题以查看python的更多详细信息,包括一些测试。

我无法对C ++或C#发表评论,但由于它们是编译语言,因此它并不重要。

答案 2 :(得分:0)

没有区别。无论如何,它都在堆栈上。