C C 記憶體管理

2021-10-05 16:36:20 字數 2036 閱讀 5087

:又叫堆疊,非靜態區域性變數/函式引數/返回值等等,棧是向下增長的;

記憶體對映段:是高效的i/o對映方式,用於裝載乙個共享的動態記憶體庫。使用者可使用系統介面建立共享記憶體,做程序間通訊;

:用於程式執行時動態記憶體分配,堆是可以向上增長的;

資料段:儲存全域性資料和靜態資料;

**段:可執行的**/唯讀常量;

程式在linux上是如何被編譯後執行起來的?

編寫的**是存在檔案系統上的的;

編譯器去讀這個程式,通過編譯鏈結生成二進位制可執行程式a.out;

./a.out在乙個終端下去執行程式,執行程式a.out相當於終端建立了乙個子程序,exec對建立的子程序進行替換,替換成a.out

c語言中動態記憶體管理方式:malloc/calloc/realloc的區別?

malloc申請空間,calloc申請空間並初始化為0,realloc在原有空間上進行擴容;

c++記憶體管理方式:new和delete

c語言記憶體管理方式在c++中可以繼續使用,但是有些地方就無能為力而且使用起來比較麻煩,因此c++又提出了自己的記憶體管理方式:通過new和delete操作符進行動態記憶體管理;

int main()

注:申請和釋放單個元素的空間,使用new和delete操作符,申請和釋放連續的空間,使用new和delete;

malloc和free,new和delete它們之間的區別?

對於內建型別(int,char等),兩者效果是一樣的;

對於自定義型別,兩者效果就不一樣了:

malloc只申請空間,new申請空間+建構函式初始化;

free只釋放空間,delete析構函式+釋放空間;

class a

~a()

private:

int _a;

}int main()

new和delete是使用者進行動態記憶體申請和釋放的操作符,operator new和operator delete是系統提供的全域性函式,new在底層呼叫operator new全域性函式來申請空間,delete在底層通過operator全域性函式來釋放空間;

operator new:該函式實際通過malloc來申請空間,當malloc申請空間成功時直接返回;申請空間失敗,則拋異常;

operator delete:該函式最終通過free來釋放空間的,若釋放錯誤則終止程式;

對於內建型別:

new和malloc,delete和free基本類似,不同的是:new在申請空間失敗時會拋異常,malloc申請失敗會返回null;

對於自定義型別:

new的原理:

呼叫operator new函式申請空間;

在申請空間上執行建構函式,完成了物件的構造;

delete的原理:

在空間上執行析構函式,完成物件中資源的清理工作;

呼叫operator delete函式釋放物件的空間;

相通點:

都是從堆上申請空間,並且需要使用者手動釋放;

不同點:

使用效果:new會呼叫建構函式,失敗拋異常,malloc失敗了返回0;

概念性質:malloc是函式,new是操作符;

使用方法:

malloc用法:引數傳位元組數,返回值void*;

new後面跟申請物件的型別,返回值是型別的指標;

指標所指向的空間不需要了,忘記或其他原因沒有釋放p指向的空間,就是記憶體洩漏;

長期執行的程式,出現記憶體洩漏危害很大,或者裝置的記憶體本身很小,也有危害;

事先預防型,如智慧型指標等;

事後查錯型,如洩漏檢測工具;

over!

c c 記憶體管理

我一直覺得記憶體是很複雜的東西.也許我把這篇文章完成的時候,我會了解一點c 的記憶體管理機制 從硬體開始 記憶體器位址空間 匯流排位址空間 cpu位址空間 虛擬記憶體位址空間 程式位址空間 邏輯位址空間 程式位址空間對c 程式設計師來說是可見的,其他位址空間我們並不關心 通過列印pointer的值 ...

C C 記憶體管理

寫乙個好的c 程式,我們要懂得好多東西,比如說最基本的物件導向程式設計思想,c 的封裝 繼承 多型機制,設計模式等,還有乙個很重要的內容便是效能優化,像c c 這種接近底層的語言,追求的就是效能,與之相關的一項內容便是記憶體管理,記憶體分配要合理,禁止破壞記憶體,不能有記憶體洩漏,操作不好的話,程式...

C C 記憶體管理

1.相同點 失敗 null 2 使用之前都要進行判斷是否為空 3 釋放空間的方式 free 4 返回值 void 可以強制型別轉換 2.不同點 1 malloc 引數 位元組數 功能 負責將空間給出 2 calloc 引數 單個元素位元組數,元素個數 功能 給出空間,且對空間進行初始化為0 若p為n...