harib07a:
整理內(nèi)存管理函數(shù):memman_alloc和memman_free能夠以最小1字節(jié)進(jìn)行內(nèi)存管理,但時(shí)間久了后,容易產(chǎn)生外部碎片;為此,筆者編寫了一些以0x1000字節(jié)為單位進(jìn)行內(nèi)存分配和釋放的函數(shù),它們會把指定的內(nèi)存大小按照0x1000字節(jié)為單位向上舍入(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為單位向上舍入的方式進(jìn)行內(nèi)存分配 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為單位向上舍入的方式進(jìn)行內(nèi)存釋放 size = (size + 0xfff) & 0xfffff000; i = memman_free(man, addr, size); return i; }
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式