C 在循环内的动态数组中分配的运行时堆栈大小

C 在循环内的动态数组中分配的运行时堆栈大小,c,memory-management,stack,C,Memory Management,Stack,我想知道在运行下面的代码时如何处理运行时堆栈 int i; for (i = 0; i < 100; i++) { int v[i+1]; ... } inti; 对于(i=0;i是一个VLA声明。@EOF我不知道(可能只是为了这个问题)。但是你的评论对代码没有意义。@如果这个问题对我有意义,我不知道你的问题是什么,或者你为什么要争论。我只是想知道在这种情况下内存是如何管理的。我不知道它到底在做什么。每个循环v[0]的地址都相同吗?

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

   int i;
   for (i = 0; i < 100; i++) {
        int v[i+1];
        ...
   }
inti;
对于(i=0;i<100;i++){
INTV[i+1];
...
}
每次循环后堆栈是否减少和增加? 堆栈最初分配的金额将适合v[101]? 编译器是否对其进行了优化,使其将v视为指针并只进行堆分配


谢谢。

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

这是C++中不允许的,所以只能标记C.@ EOF <代码> int V [I+1 ];code>是一个VLA声明。@EOF我不知道(可能只是为了这个问题)。但是你的评论对代码没有意义。@如果这个问题对我有意义,我不知道你的问题是什么,或者你为什么要争论。我只是想知道在这种情况下内存是如何管理的。我不知道它到底在做什么。每个循环v[0]的地址都相同吗?