日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 大橙子瘋嵌入式


前言

數(shù)據(jù)結(jié)構(gòu)中,堆(heap)與棧(stack)是兩個常見的數(shù)據(jù)結(jié)構(gòu),它們的存在都是為了優(yōu)化內(nèi)存,提高使用效率,各有特點,理解二者的定義、用法與區(qū)別,能夠利用堆與棧解決很多實際問題。

棧:由操作系統(tǒng)(編譯器)自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等
堆:一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時由OS回收

內(nèi)存分配圖

通過下圖了解常用的堆棧內(nèi)存分配和增長方向:


增長方向及原因

堆(heap)的增長方向是向上增長,即低地址向高地址增長。
棧(stack)的增長方向是向下增長,即高地址向低地址增長。

堆和棧的增長方向不一致可以讓空閑的內(nèi)存能最大程度的被使用。
能夠確定棧的起始地址。

從內(nèi)存分配圖來看,假設(shè)棧(stack)的增長方向也是向上增長,那么??臻g的起始位置就要事先固定下來,在棧和堆的總內(nèi)存大小確定的時候,一個分配多了。另一個分配少了,在不同程序中內(nèi)存的使用情況不同,有些棧用的多,有些堆用的多。

所以就很有可能出現(xiàn)這種情況:一個程序因為棧溢出而崩潰的時候,其實它還有大量閑置的堆空間沒有被使用,但是我們卻無法使用這些閑置的堆空間。所以最好的辦法就是讓堆和棧一個向上漲,一個向下漲,這樣它們就可以最大程度地共用這塊剩余的地址空間,達到利用率的最大化!
并且在棧和堆的總內(nèi)存大小已經(jīng)確定的情況下,不用考慮程序中堆棧的不同使用情況下就能先確定棧的起始地址。

當然,現(xiàn)在的有些芯片在編譯時可以指定棧的增長方向,不過常用的還是向下增長。


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉