可以從兩個角度解釋一下, 一個是使用者的角度,對于使用者,free函數(shù)就是解除指針和一個地址的對應(yīng)關(guān)系,這個和硬件關(guān)系不大。另外一個角度是實現(xiàn)free這個函數(shù)的角度,這個和內(nèi)存地址的管理有一定的關(guān)系,通常你通過maalloc得到的內(nèi)存地址所指向的物理空間不一定是連續(xù)的,可能對應(yīng)一片分散的物理區(qū)域,當(dāng)你釋放這些內(nèi)存時,這些分散的物理空間需要被重新排列,組合,以備下次高效的分配。

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