操作系统动态内存管理——malloc和free的工作机制
2017-03-12 21:17
274 查看
动态内存分配 就 是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。
malloc()是C语言中动态存储管理 的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值 是一个指向所分配的连续存储域的起始地址的指针。
malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足 用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传 给用户,并将剩下的那块(如果有的话)返回到连接表上。
调用free函数时,它将用户释放的内存块连接到空闲链上。
空闲链会被切成很多的小内存片 段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检 查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。然后再次进行查找,把合适的内存块返回。
malloc()是C语言中动态存储管理 的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值 是一个指向所分配的连续存储域的起始地址的指针。
malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足 用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传 给用户,并将剩下的那块(如果有的话)返回到连接表上。
调用free函数时,它将用户释放的内存块连接到空闲链上。
空闲链会被切成很多的小内存片 段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检 查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。然后再次进行查找,把合适的内存块返回。
相关文章推荐
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
- malloc,free动态申请释放内存机制
- malloc/free and new/delete 工作机制
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
- 嵌入式操作系统分析:浅析动态内存分配及Malloc/free的实现
- malloc()函数的工作机制
- malloc()函数的工作机制
- 内存管理(C语言中malloc和free的用法)
- webgis本地部署之静态网页与动态网页的工作机制
- 在C++动态库中释放调用动态库程序中生成的指针new和delete 或 malloc和free
- 操作系统内存管理机制
- (转)内存管理(C语言中malloc和free的用法)
- malloc,free 实现原理和机制
- 动态内存分配及Malloc/free的实现
- 动态分配的标准写法(new, delete; malloc, free)
- 浅谈C中的malloc和free\\感谢lj_860603,工作了,没时间验证了,觉得挺好的,转载了
- 动态分配的标准写法(new, delete; malloc, free)
- 内存管理相关知识点 及 malloc 与 free