当函数递归调用自身并将之前的状态存储在堆栈中时,我们可以将内存称为运行时分配的内存吗?这些调用堆栈内存不是在编译时分配的,因此可以确定我们可以在运行时分配堆栈内存吗?
我对网络上的材料感到有点困惑,这些材料声称运行时内存分配是动态内存分配的另一个名称,我认为这过于简单化了。 有吗
堆栈内存总是在运行时分配的,但C语言具体没有提及如何/在哪里分配。因此,C 不允许我们直接操作堆栈,这是一件好的事情。
一些非标准函数(如
alloca
)可能允许堆栈分配。可变长度数组 (VLA) 也很可能是堆栈分配的。在任何一种情况下,lib 或编译器都会处理分配/释放,就像处理任何堆栈内存一样。
“运行时内存分配”甚至“动态内存分配”都不是正式术语,因此它们可能意味着任何东西。尽管动态内存分配是分配存储/自由存储/堆分配...或其他可能被称为的其他名称的常见事实上的标准名称。 C 标准使用的正式术语是“分配存储”。