Thanks to visit codestin.com
Credit goes to github.com

Skip to content

alex1987wii/mm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

No packages published