可以從兩個(gè)角度解釋一下, 一個(gè)是使用者的角度,對于使用者,free函數(shù)就是解除指針和一個(gè)地址的對應(yīng)關(guān)系,這個(gè)和硬件關(guān)系不大。另外一個(gè)角度是實(shí)現(xiàn)free這個(gè)函數(shù)的角度,這個(gè)和內(nèi)存地址的管理有一定的關(guān)系,通常你通過maalloc得到的內(nèi)存地址所指向的物理空間不一定是連續(xù)的,可能對應(yīng)一片分散的物理區(qū)域,當(dāng)你釋放這些內(nèi)存時(shí),這些分散的物理空間需要被重新排列,組合,以備下次高效的分配。
作為一家“創(chuàng)意+整合+營銷”的成都網(wǎng)站建設(shè)機(jī)構(gòu),我們在業(yè)內(nèi)良好的客戶口碑。成都創(chuàng)新互聯(lián)公司提供從前期的網(wǎng)站品牌分析策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、創(chuàng)意表現(xiàn)、網(wǎng)頁制作、系統(tǒng)開發(fā)以及后續(xù)網(wǎng)站營銷運(yùn)營等一系列服務(wù),幫助企業(yè)打造創(chuàng)新的互聯(lián)網(wǎng)品牌經(jīng)營模式與有效的網(wǎng)絡(luò)營銷方法,創(chuàng)造更大的價(jià)值。
C管理內(nèi)存大致可以理解為兩種,分配在棧上的,一個(gè)是分配在堆上的。
臨時(shí)變量,動(dòng)態(tài)變量,分配在棧上,運(yùn)行完,直接彈出棧,就沒了。
分配在堆上的內(nèi)存,釋放的時(shí)候,基本上可以理解為,指針不指這里了。也就失去了對這塊內(nèi)存的控制。其實(shí)所謂的釋放。字面意思容易讓人理解錯(cuò)。
有些機(jī)器有些操作系統(tǒng),會(huì)在釋放的時(shí)候清空這段內(nèi)存,但是這種做法效率不高,但是安全,很少有機(jī)器這么做,多數(shù)都是所謂釋放,就是不讓你控制這塊內(nèi)存了而已。
首先肯定你的主動(dòng)思考,學(xué)習(xí)的主動(dòng)性
然后明確說,malloc/free有多種不同的實(shí)現(xiàn),可以認(rèn)為都是采用第二種辦法,或者變相采用第二種辦法。
首先說靜態(tài)變量行不通,不太可能只調(diào)用一次malloc,調(diào)第二次就覆蓋掉了,行不通。
一般的實(shí)現(xiàn),是把分配內(nèi)存的長度等信息放在malloc來的指針的前面,用一個(gè)小結(jié)構(gòu)來記錄分配的大小以及狀態(tài)信息,想要查證也不難,去下載一些源代碼閱讀一下就行。
至于你說的釋放最近一次分配的內(nèi)存,是另一個(gè)話題,涉及到內(nèi)存泄漏。
舉個(gè)小片段:
char *a = (char *)malloc(100);
a = (char *)malloc(100);
free(a);
分配了兩次,只能free最后一次分配的,前一次分配的,丟掉了,找不回來。
這個(gè)最后一次,指的是這個(gè)意思
分享標(biāo)題:c語言free函數(shù)的原理 c語言free函數(shù)的作用
網(wǎng)站網(wǎng)址:http://sd-ha.com/article36/doososg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、外貿(mào)建站、網(wǎng)站維護(hù)、網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)