harib07a:
整理内存管理函数:memman_alloc和memman_free能够以最小1字节进行内存管理,但时间久了后,容易产生外部碎片;为此,笔者编写了一些以0x1000字节为单位进行内存分配和释放的函数,它们会把指定的内存大小按照0x1000字节为单位向上舍入(roundup),0x1000大小正好是4KB.
1、向下舍入:以0x1000为单位向下舍入
0x1234_5678 & 0xffff_f000 = 0x1234_5000;
i = i & 0xffff_f000 ;
2、向上舍入:以0x1000为单位向上舍入
i = (i + 0xfff) & 0xffff_f000
unsigned int memman_alloc_4k(struct MEMMAN *man, unsigned int size) {
unsigned int a; //以0x1000为单位向上舍入的方式进行内存分配
size = (size + 0xfff) & 0xfffff000;
a = memman_alloc(man, size); return a;
}int memman_free_4k(struct MEMMAN *man, unsigned int addr, unsigned int size) { int i; //以0x1000为单位向上舍入的方式进行内存释放
size = (size + 0xfff) & 0xfffff000;
i = memman_free(man, addr, size); return i;
}
延伸阅读
学习是年轻人改变自己的最好方式
