欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
鏈表 mmalloc
/************************
 * 鏈表定義
************************/
typedef struct blockhead_t {
Int32 signature;
Bool allocated;
unsigned long size;
struct blockhead_t *next;
struct blockhead_t *prev;
} blockhead;

/**********************
 * 鏈表頭
**********************/
static blockhead *gHeapBase = NULL; //初始化為heap起始地址,大小為系統heap設置的大小,未標記,next,prev均為NULL


/*************************************
 * 為用戶(hù)分配size大小的heap
 *size - 需要分配的大小
 *return: 成功時(shí)分配的地址
  失敗時(shí)NULL
*************************************/
void *mmalloc(unsigned long size) 
{
blockhead *blockptr = gHeapBase;
blockhead *newblock;
Bool compacted = FALSE;

size = (size+7)&~7; /* unsigned long align the size */ //沒(méi)看明白什么意思??????????????????????????
DPRINTK("malloc(): size = 0x%08lx\n", size);

while (blockptr != NULL) 
{
if (blockptr->allocated == FALSE) //當前塊未標記,可以使用
{
if (blockptr->size >= size) 
{
blockptr->allocated=TRUE;
if ((blockptr->size - size) > sizeof(blockhead)) //當前塊滿(mǎn)足要求,分配成功,設置heap鏈表
{
newblock = (blockhead *)((unsigned char *)(blockptr) + sizeof(blockhead) + size);
newblock->signature = BLOCKHEAD_SIGNATURE;
newblock->prev = blockptr;
newblock->next = blockptr->next;
newblock->size = blockptr->size - size - sizeof(blockhead);
newblock->allocated = FALSE;
blockptr->next = newblock;
blockptr->size = size;
else //blockptr->size - size < sizeof(blockhead)
{ //當前塊size過(guò)小,無(wú)法分配所需空間
break; //為什么不繼續看下一塊而直接退出呢??????????????????????????
}
else //blockptr->size < size,當前塊小于所需分配大小
{
if ((blockptr->next == NULL) && (compacted == FALSE)) //這個(gè)if毫無(wú)意義?
{ //若存在已經(jīng)丟棄的heap而用戶(hù)未主動(dòng)釋放,程序自行釋放?
if (compact_heap())
{ //compact_heap函數應該是完成整合可合并的幾個(gè)heap為一整體
compacted=TRUE;
blockptr = gHeapBase;
continue;
}
}
}
}
blockptr = blockptr->next; //當前block無(wú)法滿(mǎn)足要求,看下一塊
}//end for while
DPRINTK("malloc(): returning blockptr = 0x%08lx\n", blockptr);
if (blockptr == NULL) //分配失敗
printk("Error: malloc(), out of storage. size = 0x%x\n", size);
return (blockptr != NULL) ? ((unsigned char *)(blockptr)+sizeof(blockhead)) : NULL; //返回指向分配地址的指針
}

static int compact_heap(void) 
{
// return non-zero if heap was compacted
return 0;
}
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
太強了!一文搞定虛擬內存模型和malloc內部原理?。ǜ?2段代碼)
ion system allocate
《關(guān)于libstagefright系列漏洞分析》的評論
一份通俗易懂的C語(yǔ)言?xún)却婵偨Y
【Android Camera】之 Preview
C語(yǔ)言 內存分配器實(shí)現(malloc,free,realloc)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久