国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
深入理解malloc和free

http://blog.csdn.net/unix21/article/details/8645474

2013

1.為什么free是void*,那么它怎么知道要釋放多少內(nèi)存?

《UNIX環(huán)境高級編程》


《C語言編程常見問題解答》

《你必須知道的495個C語言問題》


《UNIX環(huán)境高級編程》


2.free源碼

內(nèi)存控制塊結(jié)構(gòu)定義

struct mem_control_block {    int is_available;    int size;};

可能會認為當程序調(diào)用 malloc 時這會引發(fā)問題 —— 它們?nèi)绾沃肋@個結(jié)構(gòu)?答案是它們不必知道;在返回指針之前,我們會將其移動到這個結(jié)構(gòu)之后,把它隱藏起來。這使得返回的指針指向沒有用于任何其他用途的內(nèi)存。那樣,從調(diào)用程序的角度來看,它們所得到的全部是空閑的、開放的內(nèi)存。然后,當通過 free() 將該指針傳遞回來時,我們只需要倒退幾個內(nèi)存字節(jié)就可以再次找到這個結(jié)構(gòu)。

  在討論分配內(nèi)存之前,我們將先討論釋放,因為它更簡單。為了釋放內(nèi)存,我們必須要做的惟一一件事情就是,獲得我們給出的指針,回退 sizeof(struct mem_control_block) 個字節(jié),并將其標記為可用的。

解除分配函數(shù)
void free(void *firstbyte) {    struct mem_control_block *mcb;/* Backup from the given pointer to find the * mem_control_block */   mcb = firstbyte - sizeof(struct mem_control_block);/* Mark the block as being available */  mcb->is_available = 1;/* That''s It!  We''re done. */  return;}


看一下函數(shù)第二句,這句非常重要和關鍵。其實這句就是把指向可用空間的指針倒回去,讓它指向管理信息的那塊空間,因為這里是在值上減去了一個結(jié)構(gòu)體的大?。?/p>


3.查找free到底上哪兒查找需要釋放的內(nèi)存大小

都是指針前邊的4個字節(jié)

#include <stdio.h>#include <stdlib.h>int main(int argc, char* argv[]){	void *p1,*p2,*p3,*p4,*p5,*p6;	p1=malloc(10);	p2=malloc(38);	p3=malloc(100);	p4=malloc(200);	p5=malloc(106);	p6=malloc(300);	return 0;	}



------------------------------------------

更多內(nèi)容:

malloc()和free()的原理

C語言的malloc()和free()函數(shù)原理【整理】

使用_msize疏忽導致的bug

內(nèi)存管理內(nèi)幕

關于free如何知道要釋放內(nèi)存空間的長度問題(X86篇) [vs答案]


本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C++常用庫函數(shù)atoi,itoa,strcpy,strcmp,malloc,free的實現(xiàn)
帶你用純C實現(xiàn)一個內(nèi)存池(圖文結(jié)合)
淺談C中的malloc和free
內(nèi)存管理內(nèi)幕
C語言 內(nèi)存分配器實現(xiàn)(malloc,free,realloc)
如何實現(xiàn)一個C語言malloc
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服