之前声明所有局部变量是否有性能提升或其他原因?
Is there performance gain or another reason for declaring all local variables before?
我在我们的代码库和网上也经常看到这种风格,如果你有一个带有 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 也有很长一段时间没有),但是对于一些旧习惯来说很难改掉。对于其他人来说,保持代码库的一致性超过了在使用位置附近定义变量的好处。
就优化而言,none 通常会产生任何影响。
它对 python 产生了影响。这是一个范围界定问题,python 将首先搜索包含局部变量的字典,然后向上搜索到全局变量,然后是内置变量。
在 python 中,速度略有提高,但通常不是很多。检查 THIS 问题以查看 python 的更多详细信息,包括一些测试。
我无法对 C++ 或 C# 发表评论,但因为它们是编译语言,所以应该无关紧要。
我在我们的代码库和网上也经常看到这种风格,如果你有一个带有 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 也有很长一段时间没有),但是对于一些旧习惯来说很难改掉。对于其他人来说,保持代码库的一致性超过了在使用位置附近定义变量的好处。
就优化而言,none 通常会产生任何影响。
它对 python 产生了影响。这是一个范围界定问题,python 将首先搜索包含局部变量的字典,然后向上搜索到全局变量,然后是内置变量。
在 python 中,速度略有提高,但通常不是很多。检查 THIS 问题以查看 python 的更多详细信息,包括一些测试。
我无法对 C++ 或 C# 发表评论,但因为它们是编译语言,所以应该无关紧要。