當前位置:編程學習大全網 - 源碼破解 - 什麽叫堆棧

什麽叫堆棧

問題壹:什麽叫做堆棧? 堆和棧是兩個不同的概念。 堆(heap)上分配的內存,系統不釋放,而且是動態分配的。棧(stack)上分配的內存系統會自動釋放,它是靜態分配的。運行時棧叫堆棧。棧的分配是從內存的高地址向低地址分配的,而堆則相反。由malloc或new分配的內存都是從heap上分配的內存,從heap上分配的內存必須有程序員自己釋放,用free來釋放,否則這塊內存會壹直被占用而得不到釋放,就出現了“內存泄露(Memory Leak)”。這樣會造成系統的可分配內存的越來越少,導致系統崩潰。 堆棧是壹種執行“後進先出”算法的數據結構。 設想有壹個直徑不大、壹端開口壹端封閉的竹筒。有若幹個寫有編號的小球,小球的直徑比竹筒的直徑略小。現在把不同編號的小球放到竹筒裏面,可以發現壹種規律:先放進去的小球只能後拿出來,反之,後放進去的小球能夠先拿出來。所以“先進後出”就是這種結構的特點。 堆棧就是這樣壹種數據結構。它是在內存中開辟壹個存儲區域,數據壹個壹個順序地存入(也就是“壓入――push”)這個區域之中。有壹個地址指針總指向最後壹個壓入堆棧的數據所在的數據單元,存放這個地址指針的寄存器就叫做堆棧指示器。開始放入數據的單元叫做“棧底”。數據壹個壹個地存入,這個過程叫做“壓棧”。在壓棧的過程中,每有壹個數據壓入堆棧,就放在和前壹個單元相連的後面壹個單元中,堆棧指示器中的地址自動加1。讀取這些數據時,按照堆棧指示器中的地址讀取數據,堆棧指示器中的地址數自動減 1。這個過程叫做“彈出pop”。如此就實現了後進先出的原則。 而堆棧寄存器就是存放堆棧的寄存器。

問題二:堆棧是什麽概念 堆棧是壹個在內存中開辟的 用於存放數據的空間

它的擴展方向是從內存的大地址向小地址擴展

用於存放函數調用時候的參數傳遞

static變量存放在程序的靜態內存區。是在程序的後面最靠近前端的地方

問題三:什麽是堆棧及堆棧的作用是什麽 堆棧是小說中常用的人物塑造方法,通常是為壹個小人物所用。舉個例子,某劍客非常之吊,被稱為天下無敵。可是,壹個小人物在與他正面的鬥爭中,不用任何手段就擊敗了他,表現出他驚人的實力。這就是對這個小人物的堆棧,為的就是把他通過別人巨大實力的轉換成這個人物的威望。這就是堆棧

問題四:古代什麽叫堆棧 供貯存物品之用的建築。《詩經?小雅》有“乃求千斯倉”句,可知倉庫建築源遠流長。現代倉庫更多地考慮經營上的收益而不僅為了貯存。這是同舊式倉庫的區別所在。因此,現代倉庫從運輸周轉、貯存方式和建築設施上都重視通道的合理布置,貨物的分布方式和堆積的最大高度,並配置經濟有效的機械化、自動化存取設施,以提高貯存能力和工作效率。

倉庫由貯存物品的庫房、運輸傳送設施(如吊車、電梯、滑梯等)、出入庫房的輸送管道和設備以及消防設施、管理用房等組成。倉庫按所貯存物品的形態可分為貯存固體物品的、液體物品的、氣體物品的和粉狀物品的倉庫;按貯存物品的性質可分為貯存原材料的、半成品的和成品的倉庫;按建築形式可分為單層倉庫、多層倉庫、圓筒形倉庫。

單層倉庫 適於貯存金屬材料、建築材料、礦石、機械產品、 車輛、 油類、化工原料、木材及其制品等。水運碼頭倉庫、鐵路運輸倉庫、航空運輸倉庫多用單層建築,以加快裝卸速度。單層倉庫的總平面設計要求道路貫通,裝運的汽車、鏟車能直接進出倉庫。這種倉庫壹般采用預制鋼筋混凝土結構,柱網壹般為6米,跨度為12米、15米、18米、24米、30米、36米不等。地面堆貨荷載大的倉庫,跨度宜大。庫內吊車的起重能力根據貯存貨物單件的最大重量確定。起重量在 5噸以下的可用單梁式吊車或單軌葫蘆,大於5噸的用橋式吊車。倉庫要求防潮。如供貯存易燃品之用,應采用柔性地面層防止產生火花。屋面和墻面均應不滲水、不漏水。

多層倉庫 壹般貯存百貨、電子器材、食品、橡膠產品、藥品、醫療器械、化學制品、文化用品、儀器儀表等。底層應有卸貨裝貨場地,裝卸車輛可直接進入。貨物的垂直運輸壹般采用1.5~5噸的運貨電梯。應考慮裝運貨手推車或鏟車能開入電梯間內,以加快裝卸速度。多層倉庫常用滑梯卸貨。滑梯多用鋼筋混凝土結構,水磨石打蠟作面層;也可用金屬骨架,鋼板面層,但要防止鋼板生銹或用不銹鋼板作面層。多層倉庫如單位荷載大於500公斤,可用無梁樓蓋。倉庫內壹般不粉刷,埂漿勾縫刷白即可;貯存百貨、藥品、食品、服裝的倉庫內要粉刷,以防縫中藏蟲。多層倉庫中的“立體倉庫”的存儲和提貨應用電子計算機,實現機械化。這種倉庫占地面積小,節省人力,但貯存貨物類別有壹定範圍。

圓筒形倉庫 壹般貯存散裝水泥、幹礦碴、粉煤灰、散裝糧食、石油、煤氣等氣體。圓筒形倉庫的建築設計根據貯存物品的種類和進卸料方式確定。庫頂、庫壁和庫底必須防水、防潮,庫頂應設吸塵裝置。為便於日常維修,要設置吊物孔、人孔(庫壁設爬梯)、量倉孔和起重吊鉤等。圓筒形倉庫壹般用現澆預應力鋼筋混凝土結構,用滑模法施工。貯油庫和貯氣庫則用金屬結構。要註意倉庫的通風,每層倉庫的外墻上應設置百葉窗,百葉窗外加金屬網,以防鳥雀。危險品庫如貯油(氣)或貯化工原料的倉庫必須防熱防潮,在屋面上加隔熱層或按防爆屋面設計,出入口設置防火隔墻,地面用不產生火花的材料,壹般可用瀝青地面。貯油庫要設置集油坑。食品倉庫要防蟻防蜂。

問題五:堆棧是什麽意思 在計算機領域,堆棧是壹個不容忽視的概念,但是很多人甚至是計算機專業的人也沒有明確堆棧其實是兩種數據結構。

要點:

堆:順序隨意

棧:先進後出

堆和棧的區別

壹、預備知識―程序的內存分配

壹個由c/C++編譯的程序占用的內存分為以下幾個部分

1、棧區(stack)― 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似於數據結構中的棧。

2、堆區(heap) ― 壹般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。註意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。

3、全局區(靜態區)(static)―,全局變量和靜態變量的存儲是放在壹塊的,初始化的全局變量和靜態變量在壹塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另壹塊區域。 - 程序結束後有系統釋放

4、文字常量區 ―常量字符串就是放在這裏的。 程序結束後由系統釋放

5、程序代碼區―存放函數體的二進制代碼。

二、例子程序

這是壹個前輩寫的,非常詳細

main.cpp

int a = 0; 全局初始化區

char *p1; 全局未初始化區

main()

{

int b; 棧

char s[] = abc; 棧

char *p2; 棧

char *p3 = 123456; 123456\0在常量區,p3在棧上。

static int c =0; 全局(靜態)初始化區

p1 = (char *)malloc(10);

p2 = (char *)malloc(20);

分配得來得10和20字節的區域就在堆區。

strcpy(p1, 123456); 123456\0放在常量區,編譯器可能會將它與p3所指向的123456優化成壹個地方。

}

二、堆和棧的理論知識

2.1申請方式

stack:

由系統自動分配。 例如,聲明在函數中壹個局部變量 int b; 系統自動在棧中為b開辟空間

heap:

需要程序員自己申請,並指明大小,在c中malloc函數

如p1 = (char *)malloc(10);

在C++中用new運算符

如p2 = (char *)malloc(10);

但是註意p1、p2本身是在棧中的。

2.2

申請後系統的響應

棧:只要棧的剩余空間大於所申請空間,系統將為程序提供內存,否則將報異常提示棧溢出。

堆:首先應該知道操作系統有壹個記錄空閑內存地址的鏈表,當系統收到程序的申請時,

會遍歷該鏈表,尋找第壹個空間大於所申請空間的堆結點,然後將該結點從空閑結點鏈表中刪除,並將該結點的空間分配給程序,另外,對於大多數系統,會在這塊內存空間中的首地址處記錄本次分配的大小,這樣,代碼中的delete語句才能正確的釋放本內存空間。另外,由於找到的堆結點的大小不壹定正好等於申請的大小,系統會自動的將多余的那部分重新放入空閑鏈表中。

2.3申請大小的限制

棧:在Windows下,棧是向低地址擴展的數據結構,是壹塊連續的內存的區域。這句話的意思是棧頂的地址和棧的最大容量是系統預先規定好的,在 WINDOWS下,棧的大小是2M(也有的說是1M,總之是壹個編譯時就確定的常數),如果申請的空間超過棧的剩余空間時,將提示overflow。因此,能從棧......>>

問題六:什麽是堆棧? 堆棧是壹種執行“後進先出”算法的數據結構。

設想有壹個直徑不大、壹端開口壹端封閉的竹筒。有若幹個寫有編號的小球,小球的直徑比竹筒的直徑略小。現在把不同編號的小球放到竹筒裏面,可以發現壹種規律:先放進去的小球只能後拿出來,反之,後放進去的小球能夠先拿出來。所以“先進後出”就是這種結構的特點。

堆棧就是這樣壹種數據結構。它是在內存中開辟壹個存儲區域,數據壹個壹個順序地存入(也就是“壓入――push”)這個區域之中。有壹個地址指針總指向最後壹個壓入堆棧的數據所在的數據單元,存放這個地址指針的寄存器就叫做堆棧指示器。開始放入數據的單元叫做“棧底”。數據壹個壹個地存入,這個過程叫做“壓棧”。在壓棧的過程中,每有壹個數據壓入堆棧,就放在和前壹個單元相連的後面壹個單元中,堆棧指示器中的地址耿動加1。讀取這些數據時,按照堆棧指示器中的地址讀取數據,堆棧指示器中的地址數自動減 1。這個過程叫做“彈出pop”。如此就實現了後進先出的原則。

堆棧是計算機中最常用的壹種數據結構,比如函數的調用在計算機中是用堆棧實現的。

堆棧可以用數組存儲,也可以用以後會介紹的鏈表存儲。

下面是壹個堆棧的結構體定義,包括壹個棧頂指針,壹個數據項數組。棧頂指針最開始指向-1,然後存入數據時,棧頂指針加1,取出數據後,棧頂指針減1。

#define MAX_SIZE 100

typedef int DATA_TYPE;

struct stack

{

DATA_TYPE data[MAX_SIZE];

int top;

};

問題七:簡述什麽是堆棧,以及堆棧中入棧,出棧的過程 堆棧其實是兩種數據結構。堆棧都是壹種數據項按序排列的數據結構,只能在壹端

(稱為棧頂(top))

對數據項進行插入和刪除。要點:堆,順序隨意。棧,後進先出(Last-In/First-Out)。

針對棧這種數據結構的基本操作有兩種:壓棧和彈出,

在棧幀中包含兩個標誌----棧底和棧頂,其中棧頂標識著要push或pop

的數據的地址,而棧底則表示棧幀中最後壹個數據的內存地址。

在Win32中,寄存器esp存放著棧底指針,棧是向低地址方向生長,

因此esp指向棧頂元素

堆棧對比(操作系統):

由編譯器自動分配釋放,存放函數的參數值,局部變量的值等。其

操作方式類似於數據結構中的棧棧使用的是壹級緩存,

通常都是被調用時處於存儲空間中,調用完畢立即釋放

堆(操作系統):

壹般由程序員分配釋放,

若程序員不釋放,程序結束時可能由OS回收,分配方式倒是類似於鏈表。

堆則是存放在二級緩存中,生命周期由虛擬機的垃圾回收算法來決定(並不是壹旦成為孤兒對象就能被回收)。所以調用這些對象的速度要相對來得低壹些

堆(數據結構)

:堆可以被看成是壹棵樹,如:堆排序

棧(數據結構)

:壹種後進先出的的數據結構

具體不同語言有不同的描述,可查看各種語言的api

問題八:什麽是堆棧?堆棧有何作用? 滿意答案 熱心問友 2011-06-22堆棧其實是數據結果中的兩個概念 ,是存放數據的方式,堆:順序隨意;棧:後進先出(Last-In/First-Out)。要說用處,那就是在寫代碼的時候,有時數據存取肯定是要有規定的順序的,這個是妳自己規定的,然後按照妳所寫程序的用處的特點來用堆還是棧還是隊列之類的順序 追問: 程序設計時,為什麽要對堆棧指針SP重新賦值? 回答: 這不是初始化嘛堆棧是個特殊的存儲區,主要功能是暫時存放數據和地址,通常用來保護斷點和現場。它的特點是按照先進後出的原則存取數據,這裏的進與出是指進棧與出棧操作。80C51片內RAM的部分單元可以用做堆棧。有壹個8位的堆棧指針寄存器SP,丹用於指出當前堆棧頂部是片內RAM的哪壹個單元。80C51單片機系統復位後SP的初值為07H,也就是將從內部RAM的08H單元開始堆放信息。但是,80C51系列的棧區不是固定的,只要通過軟件改變SP寄存器的值便可更動棧區。為了避開工作寄存器區和位尋址區,SP的初值可置為2FH或更大的地址值。如果CPU在操作中要使用兩組工作寄存器,如果不使用位變量,SP的初值至少應為0FH或更大的值;如果使用位變量,SP的初值至少應為2FH或更大的值;KeilC51編譯器會自動計算SP的初始設定值,無需編程者關心。

問題九:棧是什麽意思? 棧(stack)在計算機科學中是限定僅在表尾進行插入或刪除操作的線性表。 棧是壹種數據結構,是只能在某壹端插入和刪除的特殊線性表。它按照後進先出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後壹個數據被第壹個讀出來)。 棧是允許在同壹端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的壹端稱為棧頂(top),另壹端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入壹般稱為進棧(PUSH),刪除則稱為退棧(POP)。 棧也稱為後進先出表(LIFO--Last IN First Out表龔。 棧可以用來在函數調用的時候存儲斷點,做遞歸時要用到棧!

上面已經說得很清楚了

雖然是復制的

問題十:堆棧的特點是什麽? 堆棧是壹種執行“後進先出”算法的數據結構

堆棧就是這樣壹種數據結構。它是在內存中開辟壹個存儲區域,數據壹個壹個順序地存入(也就是“壓入――push”)這個區域之中。有壹個地址指針總指向最後壹個壓入堆棧的數據所在的數據單元,存放這個地址指針的寄存器就叫做堆棧指示器。開始放入數據的單元叫做“棧底”。數據壹個壹個地存入,這個過程叫做“壓棧”。在壓棧的過程中,每有壹個數據壓入堆棧,就放在和前壹個單元相連的後面壹個單元中,堆棧指示器中的地址自動加1。讀取這些數據時,按照堆棧指示器中的地址讀取數據,堆棧指示器中的地址數自動減 1。這個過程叫做“彈出pop”。如此就實現了後進先出的原則。

  • 上一篇:2016年什麽電視劇比較好看的
  • 下一篇:妳的腳步流浪在天涯是什麽歌 走天涯歌詞
  • copyright 2024編程學習大全網