c/c++定義了4個記憶體區間:**區,全域性變數與靜態變數區,區域性變數區即棧區,動態儲存區,即堆(heap)區或自由儲存區(free store)。
◆1、堆的概念
通常定義變數(或物件),編譯器在編譯時都可以根據該變數(或物件)的型別知道所需記憶體空間的大小,從而系統在適當的時候為他們分配確定的儲存空間。這種記憶體分配稱為靜態儲存分配。
有些操作物件只在程式執行時才能確定,這樣編譯時就無法為他們預定儲存空間,只能在程式執行時,系統根據要求進行記憶體分配,這種方法稱為動態儲存分配。所有動態儲存分配都在堆區中進行。
當程式執行到需要乙個動態分配的變數或物件時,必須向系統申請取得堆中的一塊所需大小的存貯空間,用於存貯該變數或物件。當不再使用該變數或物件時,也就是它的生命結束時,要顯式釋放它所占用的存貯空間,這樣系統就能對該堆空間進行再次分配,做到重複使用有限的資源。
◆2、堆空間申請、釋放的方法
在c++中,申請和釋放堆中分配的存貯空間,分別使用new和delete的兩個運算子來完成:
指標變數名=new 型別名(初始化式);
delete 指標名;
例如:int *pi=new int(0);
它與下列**序列大體等價:
int ival=0, *pi=&ival;
區別:pi所指向的變數是由庫操作符new()分配的,位於程式的堆區中,並且該物件未命名。
◆ 3、說明
◆ 4、演示: 堆記憶體的分配與釋放
自由儲存區記憶體管理
程式執行時動態記憶體分配 dynamic memory allocation c 定義了4個記憶體區間 區,存放程式 全域性變數與靜態變數區 存放全域性的和靜態的變數與物件 區域性變數區 即棧 stack 區,存放區域性變數 自由儲存區 free store 也稱堆 heap 全域性變數在程式開始執...
棧區和堆區記憶體分配
以下是對棧區和堆區記憶體分配的區別進行了詳細的分析介紹,需要的朋友可以過來參考下 一直以來總是對這個問題的認識比較朦朧,我相信很多朋友也是這樣的,總是聽到記憶體一會在棧上分配,一會又在堆上分配,那麼它們之間到底是怎麼的區別呢?為了說明這個問題,我們先來看一下記憶體內部的組織情況 從上圖可知,程式占用...
堆區記憶體分配需要傳二級指標分配記憶體
如果主調函式中沒有給指標分配記憶體,被調函式用同級指標是無法更改主調函式的記憶體空間內容的。需要使用二級指標進行修改。測試原始碼 define crt secure no warnings include include includeint getspace for int i 0 i 5 i r...