棧為什么效率比堆高
總結(jié)如下:
1锹杈、有寄存器直接對(duì)棧進(jìn)行訪問(wèn)(esp,ebp),而對(duì)堆訪問(wèn)萤彩,只能是間接尋址。
也就是說(shuō)予权,可以直接從地址取數(shù)據(jù)放至目標(biāo)地址;使用堆時(shí)躁劣,第一步將分配的地址放到寄存器,然后取出這個(gè)地址的值,然后放到目標(biāo)地址。
2荆几、棧中數(shù)據(jù)cpu命中率更高,滿足局部性原理舟奠。
3咙俩、棧是編譯時(shí)系統(tǒng)自動(dòng)分配空間,而堆是動(dòng)態(tài)分配(運(yùn)行時(shí)分配空間),所以棧的速度快呜呐。
4以躯、棧是先進(jìn)后出的隊(duì)列結(jié)構(gòu),比堆結(jié)構(gòu)相對(duì)簡(jiǎn)單,分配速度大于堆刘陶。
“堆”和“椇床簦”并不是數(shù)據(jù)結(jié)構(gòu)上的Heap跟Stack满钟,而是程序運(yùn)行中的不同內(nèi)存空間讲竿。
那么這就簡(jiǎn)單了泥兰,棧是程序啟動(dòng)的時(shí)候,系統(tǒng)分好了給你的迈嘹,你自己用,系統(tǒng)不干預(yù)雁刷。
堆是用的時(shí)候才向系統(tǒng)申請(qǐng)的鹦筹,用完了還回去练对,這個(gè)申請(qǐng)和交還的過(guò)程開銷相對(duì)就比較大了下隧。
棧與堆都是Java用來(lái)在Ram中存放數(shù)據(jù)的地方。
棧中主要存放一些基本類型的變量(,int, short, long, byte, float, double, boolean, char)启涯。?存在棧中的數(shù)據(jù)可以共享。棧的優(yōu)勢(shì)是,存取速度比堆要快扁瓢,僅次于寄存器,棧數(shù)據(jù)可以共享补君。但缺點(diǎn)是,存在棧中的數(shù)據(jù)大小與生存期必須是確定的挽铁,缺乏靈活性伟桅。
棧是編譯時(shí)分配空間浓镜,而堆是動(dòng)態(tài)分配(運(yùn)行時(shí)分配空間)溃列,所以棧的速度快