为什么自动变量在堆栈内存中分配而不在C内的堆内存中?

时间:2014-01-01 14:28:45

标签: c memory memory-management

我很想知道在C中的堆栈内存上分配自动变量的必要性。请不要说堆栈内存更快。与堆相比,堆栈内存通常具有较小的大小,并且不需要为自动变量实现堆栈算法。那么为什么自动变量存储在堆栈内存中?

1 个答案:

答案 0 :(得分:3)

没有必要。隐式堆分配所有自动变量(并在其生命周期结束时释放它们)将完全正确,这只是一个相当糟糕的解决方案。堆栈甚至不是最佳选择,寄存器甚至更好。但是,堆栈是 在寄存器用完时分配自动存储的方式。在堆栈上分配的代码更小更快(只需碰撞指针一次)。即使是一般堆分配器的快速路径也要贵几个数量级。

即使是分段堆栈,其中保留堆栈模型并且仅通过溢出检查和动态增长(以避免溢出)进行扩充,可以使函数调用比C. Rust abandoned segmented stacks慢得多,因为除了非常棘手为了实现和优化,它们是与C竞争操作系统模块等应用程序的障碍。

请注意,您可以将堆栈任意大。当然,那么它需要更多的地址空间和(如果你真的使用了所有内存)更多的物理内存,但这是练习的重点,不是吗?