我很想知道在 C 语言中在堆栈内存上分配自动变量的必要性。请不要说堆栈内存更快。与堆相比,堆栈内存通常具有较小的大小,并且没有必要为自动变量实现堆栈算法。那为什么auto变量要存放在栈内存中呢?
最佳答案
没有必要。隐式堆分配所有自动变量(并在其生命周期结束时释放它们)是完全正确的,这只是一个相当糟糕的解决方案。堆栈甚至不是最好的选择,寄存器甚至更好。但是,是的,堆栈是寄存器用完时分配自动存储的方式。在堆栈上分配的代码小得多并且速度更快(只需碰撞指针一次)。即使通用堆分配器的快速路径也要昂贵几个数量级。
即使是分段堆栈(保留堆栈模型并仅通过溢出检查和动态增长(以避免溢出)进行增强),也可能使函数调用明显慢于 C。 Rust abandoned segmented stacks因为,除了实现和优化非常棘手之外,它们还是与 C 语言竞争操作系统模块等应用程序的障碍。
请注意,您可以使堆栈任意大。当然,那么它需要更多的地址空间和(如果您实际上使用所有内存)更多的物理内存,但这就是练习的重点,不是吗?
关于c - 为什么在 C 中自动变量分配在堆栈内存中而不是堆内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20869612/