【发布时间】:2014-01-19 02:43:49
【问题描述】:
我很想知道在 C 中在堆栈内存上分配自动变量的必要性。请不要说堆栈内存更快。与堆相比,堆栈内存通常具有较小的大小,并且没有必要为自动变量实现堆栈算法。那为什么auto变量会存放在栈内存中呢?
【问题讨论】:
-
堆栈内存更快。在堆栈上分配某些东西的时间开销为零;在堆上分配需要(隐式)调用
malloc和free。 -
与范围的亲和度高。
-
堆分配有失败的可能。使用固定堆栈大小和固定深度堆栈分配和/或使用,保证堆栈分配成功
-
@Brandin 固定甚至有界的堆栈使用很难静态证明(对于一些有用的代码根本不可能)。在大多数系统上,意外溢出堆栈比耗尽地址空间要容易得多。 OOM 几乎总是与逻辑错误或过大的数据集相关联,而堆栈溢出很容易发生在天真地使用递归或在堆栈上创建大型数组“因为它更快”。
-
还应注意,C 标准并不要求自动变量的堆栈实现。实现可以随心所欲。
标签: c memory memory-management