目標堆疊

目標堆疊

堆疊是一個不容忽視的概念,堆疊是兩種數據結構。堆疊都是一種數據項按序排列的數據結構,只能在一端(稱為棧頂(top))對數據項進行插入和刪除。目標堆疊是指目標程式的形參、局部變數、返回值和真實數據的存儲區。一般目標程式向系統申請,由系統自動分配和回收。

簡介

記憶體空間在邏輯上分為三部分:代碼區、靜態數據區和動態數據區,動態數據區又分為棧區和堆區。代碼區:存儲方法體的二進制代碼。高級調度(作業調度)、中級調度(記憶體調度)、低級調度(進程調度)控制代碼區執行代碼的切換。靜態數據區:存儲全局變數、靜態變數、常量,常量包括final修飾的常量和String常量。系統自動分配和回收。棧區:存儲運行方法的形參、局部變數、返回值。由系統自動分配和回收。堆區:new一個對象的引用或地址存儲在棧區,指向該對象存儲在堆區中的真實數據。由程式設計師分配和回收(例如Java中由JVM虛擬機的垃圾回收機制自動回收)。目標堆疊簡單來說用於管理目標程式運行時的形參、局部變數、返回值以及數據的存儲區,由系統或程式設計師進行分配和回收。目標程式,又稱為“目的程式”,為源程式經編譯可直接被計算機運行的機器碼集合,在計算機檔案上以.obj作擴展名----由語言處理程式(彙編程式,編譯程式,解釋程式)將源程式處理(彙編,編譯,解釋)成與之等價的由機器碼構成的,計算機能夠直接運行的程式,該程式叫目標程式。目標代碼儘管已經是機器指令,但是還不能運行,因為目標程式還沒有解決函式調用問題,需要將各個目標程式與庫函式連線,才能形成完整的可執行程式。

目標堆疊定義及區別

棧區(stack)— 由編譯器自動分配釋放 ,存放函式的參數值,局部變數的值等。其操作方式類似於數據結構中的棧。 堆區(heap) — 一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由OS回收 。它常用於管理算法執行過程中的信息,套用場景包括堆排序,優先佇列等。注意它與數據結構中的堆是兩回事,分配方式倒是類似於鍊表。棧:只要棧的剩餘空間大於所申請空間,系統將為程式提供記憶體,否則將報異常提示棧溢出。 堆:首先應該知道作業系統有一個記錄空閒記憶體地址的鍊表,當系統收到程式的申請時,會遍歷該鍊表,尋找第一個空間大於所申請空間的堆結點,然後將該結點從空閒結點鍊表中刪除,並將該結點的空間分配給程式,另外,對於大多數系統,會在這塊記憶體空間中的首地址處記錄本次分配的大小,這樣,代碼中的delete語句才能正確的釋放本記憶體空間。另外,由於找到的堆結點的大小不一定正好等於申請的大小,系統會自動的將多餘的那部分重新放入空閒鍊表中。棧:在Windows下,棧是向低地址擴展的數據結構,是一塊連續的記憶體的區域。這句話的意思是棧頂的地址和棧的最大容量是系統預先規定好的,在 WINDOWS下,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數),如果申請的空間超過棧的剩餘空間時,將提示overflow。因此,能從棧獲得的空間較小。

堆:堆是向高地址擴展的數據結構,是不連續的記憶體區域。這是由於系統是用鍊表來存儲的空閒記憶體地址的,自然是不連續的,而鍊表的遍歷方向是由低地址向高地址。堆的大小受限於計算機系統中有效的虛擬記憶體。由此可見,堆獲得的空間比較靈活,也比較大。

申請效率的比較:棧由系統自動分配,速度較快。但程式設計師是無法控制的。堆是由new分配的記憶體,一般速度比較慢,而且容易產生記憶體碎片,不過用起來最方便。

另外,在WINDOWS下,最好的方式是用Virtual Alloc分配記憶體,他不是在堆,也不是在棧,而是直接在進程的地址空間中保留一快記憶體,雖然用起來最不方便。但是速度快,也最靈活

堆和棧中的存儲內容棧:在函式調用時,第一個進棧的是主函式中函式調用後的下一條指令(函式調用語句的下一條可執行語句)的地址,然後是函式的各個參數,在大多數的C編譯器中,參數是由右往左入棧的,然後是函式中的局部變數。注意靜態變數是不入棧的。當本次函式調用結束後,局部變數先出棧,然後是參數,最後棧頂指針指向最開始存的地址,也就是主函式中的下一條指令,程式由該點繼續運行。 堆:一般是在堆的頭部用一個位元組存放堆的大小。堆中的具體內容有程式設計師安排。堆疊結構中,將堆疊段串成一個單向鍊表,鍊表中的每一個節點對應一個函式調用,該節點中保存了函式操作所使用的變數信息以及函式的返回地址等,該部分被稱之為堆疊幀,各函式需要維護自身的堆疊幀結構 。

堆疊其他定義

堆疊是一個特定的存儲區或暫存器,它的一端是固定的,另一端是浮動的。對這個存儲區存入的數據,是一種特殊的數據結構。所有的數據存入或取出,只能在浮動的一端(稱棧頂)進行,嚴格按照“後進先出”的原則存取,位於其中間的元素,必須在其棧上部(後進棧者)諸元素逐個移出後才能取出。在記憶體儲器 (隨機存儲器) 中開闢一個區域作為堆疊,叫軟體堆疊; 用暫存器構成的堆疊,叫硬體堆疊。堆疊處理器就是一種硬體堆疊相對暫存器檔案處理器來講,它具有很多優點系統複雜度低;精簡的指令集;晶片面積小;定址方式簡單;代碼體積小;快速的中斷回響,子程式調用能力。這些優點使得堆疊處理器在工業控制領域和航空航天領域有著不可替代的地位。

相關詞條

熱門詞條

聯絡我們