为什么使用堆栈而不是堆?

1 c++ java memory heap stack

我只看到了这个缺点:你可以得到StackOverflow :)为什么不只使用堆?

在Java,C,C++中,函数的参数在堆栈上传递.函数体内的普通变量是在堆栈中创建的.

据我所知,每个线程的堆栈是有限的,有一些默认值,但相对较低:1-8 Mb.为什么不使用堆而不是堆栈.两者都在内存中,只是操作系统从地址A到B分离是堆,而从C到D是堆栈.

有可变的参数.它说有10个变量,每个变量4个字节.如果您阅读11而不是您可能会读取一些数据"内存"垃圾,也许正是您想要的黑客攻击或者您可能会遇到分段错误...如果操作系统检测到您是坏孩子.:) - 所以安全性不能成为使用Stack的理由.

Esc*_*alo 5

性能是众多原因之一:堆栈中的内存对于预订来说是微不足道的; 它没有洞; 它可以直接映射到缓存中; 它是基于每个线程附加的.

相比之下,堆中的内存就是一堆东西; 预订比较困难; 它可以有洞.

看看这个答案(在我看来很好)解释其他一些差异.