int globalvar =1;
static
int staticglobalvar =1;
void
test()
;char char2=
"abcd"
;char
* pchar3 =
"abcd"
;int
* ptr1 =
(int*)
malloc
(sizeof
(int)*
4);int
* ptr2 =
(int*)
calloc(4
,sizeof
(int))
;int
* ptr3 =
(int*)
realloc
(ptr2,
sizeof
(int)*
4);free
(ptr1)
;free
(ptr3)
;}
1. 棧又叫堆疊,非靜態區域性變數/函式引數/返回值等等,棧是向下增長的。
2. 記憶體對映段是高效的i/o對映方式,用於裝載乙個共享的動態記憶體庫。使用者可使用系統介面建立共享共享記憶體,做程序間通訊。
3. 堆用於程式執行時動態記憶體分配,堆是可以上增長的。
4. 資料段–儲存全域性資料和靜態資料。
5. **段–可執行的**/唯讀常量。
c語言中動態記憶體管理方式
malloc/calloc/realloc和free
void
test()
c++記憶體管理方式
new/delete操作內建型別
void
test()
申請和釋放單個元素的空間,使用new和delete操作符,申請和釋放連續的空間,使用new和delete
new和delete操作自定義型別
class
test
~test()
private
:int _data;};
void
test2()
void
test2()
在申請自定義型別的空間時,new會呼叫建構函式,delete會呼叫析構函式,而malloc與free不會
operator new與operator delete函式
operator new與operator delete函式
new和delete是使用者進行動態記憶體申請和釋放的操作符,operator new 和operator delete是系統提供的全域性函式,new在底層呼叫operator new全域性函式來申請空間,delete在底層通過operator delete全域性函式來釋放空間
/*
operator new:該函式實際通過malloc來申請空間,當malloc申請空間成功時直接返回;申請空間失敗,嘗試
執行空 間不足應對措施,如果改應對措施使用者設定了,則繼續申請,否則拋異常。
*/void
*__crtdecl operator
new(size_t size)
_throw1
(_std bad_alloc)
return
(p);}/*
operator delete: 該函式最終是通過free來釋放空間的
*/void
operator
delete
(void
*puserdata)
/*free的實現
*/#define free(p) _free_dbg(p,_normal_block)
通過上述兩個全域性函式的實現知道,operator new 實際也是通過malloc來申請空間,如果malloc申請空間成功就直接返回,否則執行使用者提供的空間不足應對措施,如果使用者提供該措施就繼續申請,否則就拋異常。operator delete 最終是通過free來釋放空間的
operator new與operator delete的類專屬過載
針對鍊錶的節點listnode通過過載類專屬 operator new/ operator delete,實現鍊錶節點使用記憶體池申請和釋放記憶體,提高效率
struct listnode
void
operator
delete
(void
* p)};
class
list
~list()
delete _head;
_head =
nullptr;}
private
: listnode* _head;};
intmain()
new和delete的實現原理
內建型別
如果申請的是內建型別的空間,new和malloc,delete和free基本類似,不同的地方是:new/delete申請和釋放的是單個元素的空間,new和delete申請的是連續空間,而且new在申請空間失敗時會拋異常,malloc會返回null。
自定義型別
new的原理
呼叫operator new函式申請空間
在申請的空間上執行建構函式,完成物件的構造
delete的原理
1.在空間上執行析構函式,完成物件中資源的清理工作
3. 呼叫operator delete函式釋放物件的空間
new t[n]的原理
4. 呼叫operator new函式,在operator new中實際呼叫operator new函式完成n個物件空間的申請
5. 在申請的空間上執行n次建構函式
delete的原理
1.在釋放的物件空間上執行n次析構函式,完成n個物件中資源的清理
2. 呼叫operator delete釋放空間,實際在operator delete中呼叫operator delete來釋放空間
C 記憶體相關
1 c 的記憶體管理可分為以下幾個部分 棧 記錄程式的執行過程。堆 採用new,delete申請釋放記憶體。自由儲存區 對應於c中使用malloc,free申請釋放記憶體。全域性儲存區 也叫靜態儲存區,儲存static物件,包括全域性物件,命名空間內物件,檔案作用域內的static物件,類中的sta...
C 學習 時間相關
c 常用的函式在中 或time.h 1,資料結構 表示時間的資料結構有三個 time t tm和timeval time t long int,用來表示絕對時間 tm是乙個struct,裡邊有如下成員 tm sec 秒 tm min 分 tm hour 小時 tm mday 天 月 tm mon 月...
c 相關基礎學習
1.剖析c 是如何實現過載的?在c 中,同名的函式可以完成不同引數列表,可同可不同的返回值的函式。例如 int add int a,int b double add double a,double b int main 同名函式可有三種情況進行過載 1.引數型別不同 2.引數的個數不同 3.以上兩點...