一个应用程序共享一个堆,却有很多栈,也可以说是一个线程共享一个栈。堆空间是程序员分配的,栈空间是系统分配的。那么在程序启动的开始是如何确定堆和栈的呢?我想可能是这样的:应用程序启动的时候,进入第一个类中的时候,堆空间已经开辟,栈的个数是根据目前有多少线程决定的。程序顺序执行,该放在堆空间的就放在堆空间,该放在各自栈空间的放在各自的栈空间。函数,全局变量,局部变量,静态值等都根据自己生命周期进行释放。堆和栈都在根据程序的运行动态改变着。直到程序结束,堆和栈都被释放。
说一个不太恰当的比喻,整个过程就像是分配快递,堆呢就是一块很大的空间,整个空间中存放的都是未署名(相当于大小不定)的快递。栈呢就是各个省份的快递堆。程序运行的堆栈分配就相当于分拣员分配快递,是谁的放在谁的那一堆。有的快递被运走了,那一块空间就被释放了。