? ? ? ? 一個(gè)應(yīng)用程序共享一個(gè)堆构罗,卻有很多棧铜涉,也可以說是一個(gè)線程共享一個(gè)棧。堆空間是程序員分配的遂唧,椳酱空間是系統(tǒng)分配的。那么在程序啟動(dòng)的開始是如何確定堆和棧的呢盖彭?我想可能是這樣的:應(yīng)用程序啟動(dòng)的時(shí)候纹烹,進(jìn)入第一個(gè)類中的時(shí)候,堆空間已經(jīng)開辟召边,棧的個(gè)數(shù)是根據(jù)目前有多少線程決定的铺呵。程序順序執(zhí)行,該放在堆空間的就放在堆空間隧熙,該放在各自椘遥空間的放在各自的棧空間贞盯。函數(shù)音念,全局變量,局部變量邻悬,靜態(tài)值等都根據(jù)自己生命周期進(jìn)行釋放症昏。堆和棧都在根據(jù)程序的運(yùn)行動(dòng)態(tài)改變著。直到程序結(jié)束父丰,堆和棧都被釋放。
? ? ? 說一個(gè)不太恰當(dāng)?shù)谋扔骶蛳埽麄€(gè)過程就像是分配快遞蛾扇,堆呢就是一塊很大的空間,整個(gè)空間中存放的都是未署名(相當(dāng)于大小不定)的快遞魏滚。棧呢就是各個(gè)省份的快遞堆镀首。程序運(yùn)行的堆棧分配就相當(dāng)于分揀員分配快遞,是誰的放在誰的那一堆鼠次。有的快遞被運(yùn)走了更哄,那一塊空間就被釋放了芋齿。