C++ 声明相同的变量是否花费了我的资源?

C++ 声明相同的变量是否花费了我的资源?,c++,variable-declaration,C++,Variable Declaration,我真的不知道该如何表述这个问题,所以我试着这样描述它。。。 请问: #include <iostream> int main() { int i; while (true) for (i = 0; i < 100; i++) std::cout << i << '\n'; return 0; } #包括 int main() { int i; while(true) 对于(i=0;i

我真的不知道该如何表述这个问题,所以我试着这样描述它。。。 请问:

#include <iostream>

int main()
{
  int i;
  while (true)
    for (i = 0; i < 100; i++)
      std::cout << i << '\n';

  return 0;
}
#包括
int main()
{
int i;
while(true)
对于(i=0;i<100;i++)

std::coutNo,除非您在编译时禁用了优化,在这种情况下,对“资源”的担心是奇怪的

后者更清晰,出错的可能性更小(因为变量的作用域更小),所以使用它

声明变量(不初始化)是否需要花费资源

在优化编译器的存在下,这个问题通常是没有意义的。例如,在您的循环中,在这两种情况下都可能没有“任何资源”分配给这个变量。
不要落入过早优化的陷阱。运行意图明确的代码(对您和编译器都是如此),你会得到很好的结果。

同意previos的答案。我的观点没有本质上的区别。在这两种情况下,变量都将被放在堆栈中。差异只是在可视的可变区域-对性能不重要。

否。声明一个变量(非类类型)它本身不消耗任何资源,至少在启用优化的情况下是这样(关心禁用操作的资源是没有意义的)。使用该变量的后续操作可能会花费一些资源,如果它们有助于在“仿佛fule”下观察到的行为。请与进行比较,这将向您展示如何在各种体系结构和编译器上编译代码。使用无限循环问一个有关效率的问题很奇怪。相关:。无限循环是假定的为了方便地表示int i被多次声明的事实,“在这两种情况下,变量都将在堆栈中进行分配。”-这是错误的。启用优化后,变量值将映射到寄存器。例如:to
ebx
。不需要提供关于您同意的事实的额外答案。只需在现有答案中添加注释即可。@DanielLangr您的答案是正确的,同时也不正确。这取决于当前编译器和p平台。你不能确定变量是否在注册表或堆栈中。所以是的,我对“堆栈”的看法不太准确。czarson只提供了一个示例代码。假设他分析了一些性能问题。祝他好运:)@HaronDDC通常是的,但没有一个健全的编译器会在堆栈上存储启用优化的循环索引。尚不清楚优化与此有何关系。例如,对于优化,编译器可能会使用re在这两种情况下都注册
i
。没有它,如果它是在函数级别声明的,则可能不会。问题是,禁用优化后,您无法真正推测资源消耗的详细信息,因为编译器可能会出人意料地愚蠢,从而使调试更容易。例如,调试人员可能希望查看
i在
for
循环完成后。@SergeyA不可能回答前面提到的问题。编译器允许进行任何转换,只要满足“仿佛”规则。例如,编译器可以完全展开循环(与100计数不同,除非特别要求,但仍然如此),因此甚至不需要寄存器/堆栈空间来存储计数器。
#include <iostream>

int main()
{
  while (true)
    for (int i = 0; i < 100; i++)
      std::cout << i << '\n';

  return 0;
}