-
Notifications
You must be signed in to change notification settings - Fork 0
alex1987wii/mm
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
说明:本项目为个人练习,纯属兴趣之作,若有不完善之处还请见谅。另由于桶描述符bucket_desc结构体一般来说用的很频繁,且占用空间不 多,回收复杂度高,占用的page也不多,所以也没有进行回收。 功能:内存池管理 接口函数: void *mm_malloc(size_t size); 内存申请函数。 void mm_free(void *addr); 内存释放函数 void mm_free_s(void *addr,size_t size); 内存释放函数,size为内存空间大小,指定大小能提高查找效率 其中config_mm.h中的宏可自行配置。其中关键的几个宏变量如下: MEM_START:起始内存地址,在DEBUG版本中它作为一个外部变量使用,若要移植到stm32或51单 片机上,这个变量要设置为RAM起始地址-内核空间大小 MEM_SIZE:可分配的地址大小(字节计) PAGE_SIZE:页大小,一般为4K,不能过大,或过小,超出范围编译不过。 ARCH:机器宏 ,主要为64和32,表示机器位数,通过makefile设置或直接传递, NR_BUCKET_DESC:本来是和PAGE_SIZE相关的,但编译器不给面子,使用内置函数编译不过,现直接 定义,但应保证它和PAGE_SIZE的关系为NR_BUCKET_DESC = log2(PAGE_SIZE),修改时请注意。 有人说写注释不要写是怎么实现的,只要写函数功能是什么,我也比较偷懒,注释几乎没有,不 过函数名就能让人基本知道是做什么用的,自己思考下是如何实现的也能锻炼下自己。 整体思路:将整个内存空间分割成PAGE_SIZE大小的n个空间,每个PAGE都对应bitmap中的一个位 和一个bucket_desc(描述符)bitmap对应的位为1表示当前页正在使用,反之没有使用,每个页由 一个bucket_desc来管理。若PAGE_SIZE为4K,则有13种类型的bucket_desc,大小从1,2,4一直到4096, 头指针和大小在bucket_dir表中。当申请一个特定大小的内存的时候会将申请的空间大小向2的 指数上取整,找到对应的描述符,来进行分配。 若还有疑问,可群内发消息,有时间我会回复
About
memory mangement
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published