之前声明所有局部变量是否有性能提升或其他原因

Is there performance gain or another reason for declaring all local variables before?

本文关键字:其他 是否 声明 局部变量 性能      更新时间:2023-10-16

我在我们的代码库和在线代码库中经常看到这种风格,在这里,如果你有一个带有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,它们是我使用的语言,我在哪里一次又一次地看到它们。

许多较旧的代码都这样做,因为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也有很长一段时间没有了),但对于一些旧习惯来说,它很难改掉。对其他人来说,在代码库中保持一致性比在使用变量的地方定义变量的好处更重要。

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

它在python中起着重要作用。这是一个范围界定问题,python将首先搜索包含局部变量的字典,然后向上搜索全局变量,然后再进行内建。

在python中,速度略有提高,尽管通常不会太快。检查这个问题以查看python的更多详细信息,包括一些测试。

我不能评论C++或C#,但因为它们是编译语言,所以这并不重要。

没有区别。不管怎样,它都在堆栈上。

相关文章: