c c 記憶體管理

2021-09-27 05:57:44 字數 883 閱讀 6674

動態記憶體分配

一、記憶體區域

1、棧、堆、全域性區、常量區、**區

棧:系統自動分配的空間,只要不特殊宣告,就定義在棧區,函式的區域也在棧上。棧是向下增長的

堆:使用動態記憶體分配的方式可以申請堆空間,用完要手動釋放

全域性區:靜態變數、全域性變數(static)

常量區:**中的數字、字元等常量,例如』a』,-1.2等

**區:存放可執行**,避免頻繁的讀硬碟。

2、data、bss、text

data:資料段,要放在可執行檔案中的資料,包括堆、棧、已初始化的全域性變數

bss:未初始化的全域性變數,不占用可執行檔案的大小

text:唯讀區域,包括常量區和**區

2、動態記憶體分配的常見函式和運算子

函式:c語言中stdlib.h中提供的系列函式

void *malloc(size_t)

void *calloc(size_t, size_t)

malloc不會進行初始化,calloc會初始化空間為0,所以在追求效率的時候,使用malloc

void *realloc(void * p, size_t size)

1、申請size個位元組的空間

2、將p中的值拷貝到剛申請的空間中

3、釋放p,返回剛申請的空間

void free(void *)

運算子:new delete

※通過動態記憶體分配例項化物件的時候,new/delete會自動呼叫構造/析構函式,而malloc/free不會。所以在給類分配空間時,最好使用new/delete。

int * pi = new int;

delete pi;

int * pi = new int [5];

delete pi;

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...