【问题标题】:Run-time stack size allocated in dynamic array inside a loop在循环内的动态数组中分配的运行时堆栈大小
【发布时间】:2014-06-12 14:55:28
【问题描述】:

我想知道运行下面的代码时运行时堆栈是如何处理的

   int i;
   for (i = 0; i < 100; i++) {
        int v[i+1];
        ...
   }

每次循环后堆栈都会减少和增长? 堆栈最初分配的数量适合 v[101] ? 它是否被编译器优化,所以它把 v 当作一个指针,只做堆分配?

谢谢。

【问题讨论】:

  • 这在 C++ 中是不允许的,所以应该只标记 C。
  • @EOF int v[i+1]; 是 VLA 声明。
  • @EOF 我不知道(可能只是为了这个问题)。但是您的评论对代码没有意义。
  • @EOF 这个问题对我来说很有意义,我不知道你的问题是什么,或者你为什么争论。
  • 我只是想知道在这种情况下如何管理内存。我不知道它到底在做什么。例如。每个循环 v[0] 的地址是否相同?

标签: c memory-management stack


【解决方案1】:

取决于编译器和优化设置。一个聪明的编译器可以计算出所需的最大大小是 100,并在开始时从堆栈中分配一次并重用它。堆栈分配实际上是免费的,因为它只是一个指针调整,因此使用堆代替没有任何意义。

【讨论】:

    猜你喜欢
    • 2014-12-19
    • 2016-08-26
    • 2010-10-30
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 2013-03-16
    • 2014-12-14
    • 2019-05-17
    相关资源
    最近更新 更多