之前声明所有局部变量是否有性能提升或其他原因
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也有很长一段时间没有了),但对于一些旧习惯来说,它很难改掉。对其他人来说,在代码库中保持一致性比在使用变量的地方定义变量的好处更重要。
就优化而言,这些通常都不会产生任何影响。
它在python中起着重要作用。这是一个范围界定问题,python将首先搜索包含局部变量的字典,然后向上搜索全局变量,然后再进行内建。
在python中,速度略有提高,尽管通常不会太快。检查这个问题以查看python的更多详细信息,包括一些测试。
我不能评论C++或C#,但因为它们是编译语言,所以这并不重要。
没有区别。不管怎样,它都在堆栈上。
相关文章:
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- MESI协议和std::atomic-它是否确保所有写入立即对其他线程可见?
- "std::list::splice(std::const_iterator pos, std::list&& other)"是否保证将"其他"留空?
- 是否可以使用其他变量为变量分配值,而无需在 C++ 中更改其值?
- 对于BTreeMap和其他依赖于Ord的东西,是否有等效于C++比较器对象?
- MOVNTI 存储是否相对于由同一线程创建的其他 MOVNTI 存储重新排序?
- 在C++单元测试上下文中,抽象基类是否应将其他抽象基类作为函数参数
- 这种比较是否不一致(或者存在其他问题)?
- 了解'this'或其他参数是否为右值
- 如何在 Linux 下使用 c++ 知道文件是否被其他进程使用?
- 严格的别名是否会阻止您通过其他类型写入 char 数组?
- C++如何判断互斥体在阻塞其他线程时是否被单个线程不成比例地占用
- 当其他线程正在编写线程安全时,我是否必须互斥读操作
- 检查IP是否在其他IP网络范围内,并查找下一个可用IP
- cv::cuda::setTo()是否有其他选择
- 如何知道指针是否已在其他地方释放
- 如何检查一个字符串是否包含多个其他字符串?
- 是否可以将多个结构作为一个数据包存储在一个函数中,然后传递给其他函数并在那里提取?
- 除了系统("pause")之外,是否有其他选项可以保持可执行文件打开?
- 在代码的其他部分中对lock_gard和不使用相同的互斥锁是否安全?