核心空間:作業系統相關的**,使用者不能直接訪問。
棧(由上到下):儲存非靜態區域性變數、函式引數、返回值。
記憶體對映段:靜態庫,動態庫。
堆(由下到上):程式執行時動態記憶體分配,malloc,calloc,realloc,new,new申請的空間。
資料段:儲存全域性變數、靜態資料。
**段:可執行**,唯讀常量。
相同點:
不同點:
malloc:
- 返回值:void*,引數:n(需要申請空間的位元組數)
calloc
- 返回值:void* ,引數:n,size(n:要申請空間的個數,size:單個元素型別的大小)
- 用calloc申請空間的總大小為number* size。
- calloc在申請空間時,預設對其區域進行初始化操作,預設初始化的值為0。
realloc
- 返回值:void*,引數:p,size(將p指向的空間調整到size位元組)
注意:此時分為兩種情況:
- 1、size<=oldsize(p空間原本大小)
直接將p空間縮小到size,返回p空間位址。
- 2、size>oldsize
void
testfunc()
class
date
~date()
private
:int d;};
void
testfunc()
在申請空間上忙new申請的空間會呼叫建構函式,malloc只會申請出乙個空間,delete會呼叫析構函式,free不會。
注意 :在申請空間與釋放空間時,new與delete,malloc與free必須成對出現。否則會出現錯誤。
new/delete
int
* p1 =
newint[10
];//申請10個int型空間
delete
p1;date* p2 =
new date[10]
;//申請10個自定義型別空間
delete
p2;
void
*operator
new(size_t size)
void operator delete()。
第一步呼叫析構函式,釋放物件中的資源
在釋放物件資源結束前最後一句,呼叫free()函式,釋放物件空間。
operator new 實際也是通過malloc來申請空間,如果malloc申請空間成功就直接返回,否則執行使用者提供的空間不足應對措施,如果使用者提供該措施就繼續申請,否則就拋異常。operator delete最終是通過free來釋放空間。
new[ ]底層原理
delete[ ]底層原理
C 動態記憶體管理
我們都知道在c 中可以用new malloc動態分配記憶體空間,delete free釋放動態開闢的記憶體空間。1.那麼既然c 中有了可以動態開闢記憶體的函式為什麼又要有new delete呢?c 中的malloc free是繼承c語言中的malloc free,它的用法和在c語言中的用法一模一樣。...
C 動態記憶體管理
1 總結並剖析malloc free和new delete之間關係和差異。1 他們都是動態記憶體管理的入口 2 malloc要計算空間大小,返回值要強轉 new自動計算位元組大小,返回值是相應型別的指標 3 malloc只開闢空間 new開闢空間 呼叫建構函式初始化 delete呼叫析構函式清理 釋...
c 動態記憶體管理
c語言動態記憶體管理 c中關於動態記憶體的標準庫函式 malloc calloc realloc free 以下是關於這幾個函式的介紹 1 malloc 用於動態開闢記憶體 堆空間 返回型別為void 引數 size t size 是無符號整型表示要開闢的空間大小,單位是位元組,2 calloc 用...