c語言儲存區 堆疊靜態儲存區

2021-10-21 18:26:40 字數 844 閱讀 1943

由編譯器自動分配釋放,其中存放在主調函式中被呼叫函式的下一句**、函式引數和區域性變數,容量有限

堆由程式設計師自己分配釋放(用malloc和free,或new和delete) ,如果我們不手動釋放,那就要到程式結束才釋放。如果對分配的空間在不用的時候不釋放而一味的分配,那麼可能會引起記憶體洩漏,其容量取決於虛擬記憶體,較大。

靜態儲存區

由在編譯時由編譯器分配,由系統釋放,其中存放的是全域性變數、static變數和常量.

程式**區

存放函式體的二進位制**

資料段1.唯讀資料段:是程式使用的一些不會被修改的資料,使用這些資料的方式類似查表,一般是const的變數和文字常量。

2.已經初始化的讀寫資料段:在程式中宣告,並且具有初值的變數,已經初始化的全域性變數,已經初始化的靜態區域性變數。

3.未初始化 bss:未初始化的全域性變數和靜態變數

new會使用自由儲存區 malloc使用堆

(堆是作業系統維護的一塊記憶體,而自由儲存是c++中通過new與delete動態分配和釋放物件的抽象概念。堆與自由儲存區並不等價。)

//new 和malloc的區別

new是c++關鍵字,需要編譯器支援,malloc是庫函式,需要標頭檔案支援。

new不需要指定記憶體大小,可以自動計算,malloc需要指定分配記憶體大小

new分配記憶體成功返回物件型別的指標。malloc記憶體返回void *,需要強制型別轉換。

new分配失敗丟擲bac_alloc異常 malloc分配記憶體失敗返回null

new會申請記憶體然後呼叫建構函式初始化變數,返回自定義型別指標。malloc只能動態申請釋放記憶體

c++允許new過載操作符 malloc不允許過載

C 堆 棧 靜態儲存區

棧堆 靜態儲存區 生命週期 函式結束即釋放 new,malloc開闢,delete,free釋放 釋放前,一直存在 最長,程式退出才釋放 儲存型別 程式 區域性變數 new,malloc申請的空間,用於儲存資料 常量static 修飾的變數,用於儲存資料 大小vs2010預設1m vs2010,x3...

堆疊靜態儲存區

1 從靜態儲存區域分配 內存在程式編譯時就已經分配好,這塊內存在程式的整個執行期間都存在。速度快 不容易出錯,因為有系統會善後。例如全域性變數,static變數等。靜態變數分為區域性靜態變數和全域性靜態變數,注意區分,區域性靜態變數不是全域性變數 靜態全域性變數的作用域僅限於當前原始檔,靜態區域性變...

堆,棧,靜態儲存區和常量儲存區

在c 中,記憶體分成4個區,他們分別是堆,棧,靜態儲存區和常量儲存區 1 棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變數的存 儲區.裡面的變數通常是區域性變數,函式引數等.2 堆,又叫自由儲存區,它是在程式執行的過程中動態分配的,它最大的特性就是動.態性.由new分配的記憶體塊,...