C語(yǔ)言的內(nèi)存分兩種:靜態(tài)內(nèi)存徽惋,動(dòng)態(tài)內(nèi)存
靜態(tài)內(nèi)存
靜態(tài)內(nèi)存包括 棧區(qū),數(shù)據(jù)區(qū),代碼區(qū)
[特點(diǎn)]
? (1)靜態(tài)內(nèi)存,由系統(tǒng)進(jìn)行分配 who
? (2)靜態(tài)內(nèi)存的大小在程序運(yùn)行之前就可以確定 when
? (3)靜態(tài)內(nèi)存是在 棧區(qū)乘盖,數(shù)據(jù)區(qū),代碼區(qū) 進(jìn)行分配的 where
? (4)靜態(tài)內(nèi)存憔涉,由系統(tǒng)進(jìn)行釋放 who
動(dòng)態(tài)內(nèi)存
動(dòng)態(tài)內(nèi)存订框,堆區(qū)
[特點(diǎn)]
? (1)動(dòng)態(tài)內(nèi)存,由程序員手動(dòng)寫代碼進(jìn)行分配 who
? (2)動(dòng)態(tài)內(nèi)存兜叨,內(nèi)存大小/內(nèi)存分配動(dòng)作穿扳,必須在程序運(yùn)行時(shí)才能確定 when
? (3)動(dòng)態(tài)內(nèi)存,是在 堆區(qū) 進(jìn)行分配的 where
? (4)動(dòng)態(tài)內(nèi)存国旷,由程序員手動(dòng)寫代碼進(jìn)行釋放 who
堆內(nèi)存分配 memory alloc
void *malloc(size_t);
//malloc的參數(shù)矛物,表示所要分配的堆內(nèi)存的大小(以字節(jié)為單位)
//malloc的返回值,返回的是成功分配的內(nèi)存的首地址
? [注] 因?yàn)楣虻祷氐倪@個(gè)地址可能是任意大小內(nèi)存的首地址履羞,所以返回值類型為一個(gè)泛型指針類型
堆內(nèi)存釋放 free
void free(void *);
//傳入所要釋放堆內(nèi)存的首地址,釋放對(duì)應(yīng)的堆內(nèi)存
//同一個(gè)堆內(nèi)存屡久,不能多次釋放忆首,多次釋放會(huì)導(dǎo)致程序崩潰
//堆內(nèi)存不進(jìn)行釋放,會(huì)導(dǎo)致內(nèi)存泄露
//對(duì)于一個(gè)長(zhǎng)時(shí)間運(yùn)行的應(yīng)用程序來(lái)說被环,內(nèi)存泄露會(huì)導(dǎo)致系統(tǒng)的[可用內(nèi)存]變少糙及,應(yīng)用反應(yīng)遲鈍,卡
//對(duì)于一個(gè)短時(shí)間運(yùn)行的應(yīng)用程序來(lái)說筛欢,內(nèi)存泄露可以忽略.因?yàn)槌绦蚪Y(jié)束時(shí)浸锨,未及時(shí)釋放的堆內(nèi)存,也會(huì)被系統(tǒng)釋放