有關動態物件建立:一般來說,編譯器將記憶體分為三部分:靜態儲存區域、棧、堆。靜態儲存區主要儲存 全域性變數和靜態變數,棧儲存呼叫函式相關的變數、位址等,堆儲存動態生成的變數,在c中是指由malloc,free運算產生釋放的儲存空間,在c++中 就是指new和delete運算子作用的儲存區域。
1、 靜態儲存分配
指在編譯時對資料物件分配固定的儲存位置,執行時始終不變。即一旦儲存空間的某個位置分配給了某個資料名,則在目標程式的整個執行過程中,此位置(位址)就屬於該資料名。
由靜態儲存分配產生的資料區稱為靜態資料區。
靜態儲存分配適用於不允許遞迴過程或遞迴呼叫,不允許可變體積的資料結構的語言
靜態儲存分配的特點:簡單、易於實現
例:fortran語言,它所有的資料都屬於這一類。
2、 動態儲存分配
指在執行階段動態地為源程式中的資料物件分配儲存位置
實行動態儲存分配的語言的特點:
允許遞迴過程
允許可變資料結構(可變陣列或記錄等)
允許使用者自由申請和釋放空間
這種程式在編譯時無法確定執行時所需資料空間的大小,需待程式執行時動態確定
有兩種動態儲存分配方式:棧式(stack)、堆式(heap)。
3、 棧式動態儲存分配
在資料空間中開闢乙個棧區,每當呼叫乙個過程時,它所需要的資料空間就分配在棧頂,每當過程工作結束時就釋放這部分空間。空間的使用符合先借後還的原則。
特點:先借後還,管理簡單,空間使用效率高
棧式動態儲存分配適合於pascal、c等典型過程式語言。
4、 堆式動態儲存分配
在資料空間中開闢一片連續的儲存區(通常叫做堆),每當需要時就從這片空間借用一塊,不用時再退還。借用與歸還未必服從「先借後還」的原則。
堆式動態儲存分配適合於使用者可以自由申請和歸還資料空間的語言,如c++。
特點:適用範圍廣,容易出現碎片。
如何充分利用空間是個難題。
關於靜態儲存區域 棧 堆
有關動態物件建立 一般來說,編譯器將記憶體分為三部分 靜態儲存區域 棧 堆。靜態儲存區主要儲存全域性變數和靜態變數,棧儲存呼叫函式相關的變數 位址等,堆儲存動態生成的變數,在c中是指由malloc,free運算產生釋放的儲存空間,在c 中就是指new和delete運算子作用的儲存區域。昨天才看ppt...
堆疊靜態儲存區
1 從靜態儲存區域分配 內存在程式編譯時就已經分配好,這塊內存在程式的整個執行期間都存在。速度快 不容易出錯,因為有系統會善後。例如全域性變數,static變數等。靜態變數分為區域性靜態變數和全域性靜態變數,注意區分,區域性靜態變數不是全域性變數 靜態全域性變數的作用域僅限於當前原始檔,靜態區域性變...
靜態儲存,堆,棧的理解
棧 可以理解為為乙個瓶子,他遵循著先進後出的原則 堆 是一種經過排序的樹狀結構,每乙個節點都有乙個值,我們通常說的堆是二叉堆,堆的特點是跟節點最大或者最小,且子節點也是乙個堆,所以我們在使用的堆的時候,都是隨便取乙個節點,並沒有什麼順序 記憶體的基本概述 棧 編譯器自動申請和自動釋放的區域,存放函式...