C C 記憶體管理

2021-09-23 20:43:51 字數 2228 閱讀 5401

1、關於**中的資料存放在**的問題

1)只要是全域性變數和靜態變數都存放在資料段

2)區域性變數存放在棧上,但是區域性變數儲存的內容是存放在**段的

3)如果有malloc等的這些動態空間開闢的,變數存放在棧上,但是開闢出來的內容 存放在堆上

2、malloc/calloc/realloc

malloc:只開闢空間,不初始化

calloc(10,sizeof(int)):開闢空間,並按位元組初始化為0

realloc(pb,sizeof(int)):如果pb是由calloc開闢出來的,則此時pb不需要再釋放,因為realloc只是在原來開好的空間上進行調整而已,所以不能釋放

realloc(void* ,newsize):調整空間

newsizepb指向的空間大小:1、如果pb之後還有足夠的空間,只修改底層 (往後挪一點)

2、如果pb之後沒有足夠的空間,就開闢乙個新的空間,再把原來的內容拷過來,釋放原有空間。

#includeusing namespace std;

void test()

int main()

3、c++記憶體管理方式

1)new/delete 和 new/delete

void test2()

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

2)new和delete操作自定義型別

class test

private:

int _data;

};void test2()//c版

void test22()//c++版

3)malloc和new的區別?

malloc不會調建構函式new會調建構函式

new a[10]:相當於調了10次建構函式

delete和free的區別?

free不會調析構函式,delete 會調析構函式

5、operator new與operator delete(不是運算子過載,是乙個全域性函式)

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

operator delete來釋放空間(其本質還是malloc和free)

operator new:本質是malloc+異常

operator delete:封裝了free,沒有異常(還錢不會失敗)

operator new:封裝了malloc+異常(借錢有可能會失敗)

呼叫順序:

new 自定義型別:new–>operator new–>malloc(內部)–>構造

delete 自定義型別:delete–>析構–>operator delete–>free(內部)

6、總結

c語言和c++記憶體管理的區別:

1)內建型別

malloc:只開闢空間,不初始化,空間開闢失敗,返回null;

free:釋放空間,失敗拋異常

new:operator new–>malloc+異常

delete:delete–>operator delete–>free

new[n]:呼叫n次operator new

delete :呼叫n次operator delete

2)自定義型別

malloc:同上

free:同上

new:operator new–>malloc+異常–>構造,空間開闢失敗拋異常

delete:delete–>析構–>operator delete–>free

new:呼叫n次operator new,n次構造

delete:呼叫n次operator delete,n次構造

7、定位new表示式

1)使用場景

我們知道malloc是不會呼叫建構函式的,如果用malloc申請一塊空間,調new的定位表示式就可以呼叫建構函式,在已開好的空間上顯示呼叫建構函式進行初始化。

class test

~test()

private:

int _data;

};void test()

int main()

執行結果是呼叫了建構函式

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