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

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

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;
}

网友评论