malloc函数详解之自己用C语言写出实现malloc()和free()功能的函数
来源:互联网 发布:access数据库百度云 编辑:程序博客网 时间:2024/05/21 06:14
malloc()函数使用来动态分配内存空间,free()用来释放内存空间,两者搭配使用,若忘记free,则可能引起内存泄漏。
为什么要自己编写malloc()函数:在嵌入式编程中,内存的大小都是有限的,考虑到成本问题,我们尽量包含少一点的函数库,减小不必要的浪费。
malloc函数实现的原理:
C语言实现过程:
首先是定义一块区域:
char memory[2000]; //模拟一个堆空间
定义一个区块的结构体:
struct block{ size_t size; //区块大小 int free; //是否已使用 struct block *next; //指向下一个区块 };
对模拟空间进行初始化:
void initialize() { struct block *freeList = (void *)memory; freeList->size=2000-sizeof(struct block); //可用空间大小 freeList->free=1; //1:空闲 0:使用 freeList->next=NULL; //指向空 }
MyMalloc()函数编写:
void *MyMalloc(size_t noOfBytes){ struct block *curr,*prev; void *result; if(!(freeList->size)) { initialize(); } curr=freeList; while((((curr->size)<noOfBytes)||((curr->free)==0))&&(curr->next!=NULL)) { prev=curr; curr=curr->next; } if((curr->size)==noOfBytes) { curr->free=0; result=(void*)(++curr); return result; } else if((curr->size)>(noOfBytes+sizeof(struct block))) //所需要的内存大小小于区块大小 { split(curr,noOfBytes); //分割区块函数 result=(void*)(++curr); //使用的位置 return result; } else { result=NULL; return result; }}
split()函数实现:
void split(struct block *fitting_slot,size_t size){ struct block *new=(void*)((void*)fitting_slot+size+sizeof(struct block)); //定义new的地址 new->size=(fitting_slot->size)-size-sizeof(struct block); //定义size大小 new->free=1; //设置是否工作 new->next=fitting_slot->next; //独立出去,形成新的块 fitting_slot->size=size; fitting_slot->free=0; fitting_slot->next=new;}Myfree()函数:
void merge(){ struct block *curr,*prev; curr=freeList; while((curr->next)!=NULL) { if((curr->free) && (curr->next->free)) { curr->size += (curr->next->size)+sizeof(struct block); curr->next = curr->next->next; } prev=curr; curr=curr->next; }}
void MyFree(void* ptr){ if(((void*)memory<=ptr)&&(ptr<=(void*)(memory+20000))) { struct block* curr=ptr; --curr; curr->free=1; merge(); } else return;}
阅读全文
0 0
- malloc函数详解之自己用C语言写出实现malloc()和free()功能的函数
- C 语言 malloc 和 free函数浅谈
- malloc 和free()函数的用法:
- 关于C语言中的malloc和free函数的用法
- C语言的malloc()和free()函数原理【整理】
- C语言的malloc()和free()函数原理
- 关于C语言中的malloc和free函数的用法
- (转载)C语言的malloc()和free()函数原理【整理】
- C语言的malloc()和free()函数原理
- C语言中malloc()和free()函数的具体作用
- C malloc free 函数实现
- malloc和free函数详解
- malloc和free函数详解
- malloc和free函数详解
- malloc 和 free 函数详解
- malloc和free函数详解
- malloc和free函数详解
- malloc和free函数详解
- 解决android4.2以下addJavaScriptInterface不安全问题
- osgearth由经纬度得到高程
- java生成唯一订单号
- iOS7到iOS11推送功能的差异总结
- kafka + zookeeper 单节点配置
- malloc函数详解之自己用C语言写出实现malloc()和free()功能的函数
- kettle根据主键批量更新
- Redis中 MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist
- SpringMVC下载不支持IE 和其他浏览器兼容模式,和IE 中文乱码问题
- 相关
- 虚拟机centos6.9开启ssh远程控制
- memcached的分布式算法–一致性hash
- vue学习笔记(一)this.$http.get()
- html引用另一个html