【发布时间】:2020-05-10 08:57:16
【问题描述】:
在循环内部或外部定义 var 有什么区别? 例如:
int a;
for(int i=1; i<11; i++){
a = rand()%10;
printf("%d\n",a);
}
首先定义a,然后在循环中使用。
但在:
for(int i=1; i<11; i++){
int a = rand()%10;
printf("%d\n",a);
}
这里a 是在循环中定义的。
有什么区别,哪个更慢?
【问题讨论】:
-
首先,循环后可以访问
a;在第二个,你不能。否则,它们基本相同。当然,你也可以简单地去掉a并使用printf("%d\n", rand() % 10);— 优化器可能会为你做这件事。 -
首先构建启用优化的两个变体。然后查看两个示例的生成代码,看看是否有任何区别。如果有然后执行你的代码几百万次来衡量。最后想想你是否真的需要费心进行这种(可能的)微优化(一般的答案是否)。
-
@Someprogrammerdude 你刚刚推荐一个新手检查优化的汇编代码来回答可变范围问题吗?
-
建议(遵循规范用法):
for (int i = 0; i < 10; i++) -
@JonathanLeffler 嗨,请告诉我在内存使用方面初始化变量的正确方法,我认为在 for 循环中初始化会再次创建并释放堆栈中的 int-memory与在循环外初始化变量相比,这将导致稍微多一点的时间。