真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Utility中內(nèi)存分配策略的示例分析

這篇文章主要為大家展示了“Utility中內(nèi)存分配策略的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Utility中內(nèi)存分配策略的示例分析”這篇文章吧。

站在用戶的角度思考問題,與客戶深入溝通,找到孝昌網(wǎng)站設(shè)計(jì)與孝昌網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋孝昌地區(qū)。

從系統(tǒng)內(nèi)存池(也就是堆)里分配內(nèi)存,主要用的是ANSI定義的這幾個(gè)函數(shù)
typedef unsigned int size_t;void *malloc(size_t nBytes);void *calloc(size_t elemNum, size_t elemSize);void *realloc(void *pBlock, size_t newSize);void free(void *ptr);
VxWorks還實(shí)現(xiàn)了一個(gè)專門與calloc()配合的cfree()
typedef int _Vx_STATUS;typedef _Vx_STATUS STATUS;STATUS cfree(char *pBlock);

而存放在堆里的那些內(nèi)存塊具體是如何管理的呢?

Vx5用的策略是First Fit,可以翻譯為最先分配算法。在這種策略下,所有的空閑內(nèi)存塊按照地址從低到高排列。當(dāng)需要申請(qǐng)內(nèi)存時(shí),從低地址開始查找,第一塊滿足需求的內(nèi)存塊被分配。所以當(dāng)系統(tǒng)申請(qǐng)內(nèi)存的次數(shù)比較多了之后,低地址就會(huì)留下大量小塊內(nèi)存,導(dǎo)致后期的查找時(shí)間略長。大致代碼如下

void *memXxxAlloc    (    PART_ID  partId,  /* memory partition to allocate from */    unsigned nBytes,  /* number of bytes to allocate */    unsigned alignment/* boundary to align to */    ){    ...    DL_NODE *pNode = DLL_FIRST(&partId->freeList);    ...    while(pNode != NULL)        {        /* fits if:         *    - blocksize > requested size + extra room for alignment or,         *    - block is already aligned and exactly the right size         */        if ((NODE_TO_HDR (pNode)->nWords > nWordsExtra) ||            ((NODE_TO_HDR (pNode)->nWords == nWords) &&             (ALIGNED (HDR_TO_BLOCK(NODE_TO_HDR(pNode)), alignment))))            break;        pNode = DLL_NEXT (pNode);        }    ...    }
而到了Vx6&7,用的策略是  Best Fit,可以翻譯為最優(yōu)分配算法。在這種策略下,所有的空閑內(nèi)存塊按照尺寸從小到大排列,并使用AVL(平衡二叉樹)維護(hù)。當(dāng)需要申請(qǐng)內(nèi)存時(shí),從Root節(jié)點(diǎn)開始查找,滿足需求且尺寸最小的內(nèi)存塊被分配。這種算法會(huì)保留大的內(nèi)存塊,提高了整體的分配成功幾率,但會(huì)多出一些非常小的碎片,不過時(shí)間復(fù)雜度只有o(ln(N))。大致代碼如下
AVLU_NODE *avlXxxGet    (    AVLU_TREE root, /* root node pointer */    UINT      key   /* search key */    )    {    AVLU_NODE *pNode;    AVLU_NODE *pSuccessor;    pNode = root;    pSuccessor = NULL;    while (pNode != NULL)        {        if (key >= pNode->key)            {            pNode = pNode->right;            }        else            {            pSuccessor = pNode;            pNode = pNode->left;            }        }    return (pSuccessor);    }
當(dāng)然了,不管哪種策略,在釋放內(nèi)存時(shí),都會(huì)自動(dòng)與前后的空閑塊(如果有的話)合并。否則,系統(tǒng)運(yùn)行一會(huì)就都是碎片了。  

計(jì)算機(jī)專業(yè)的童鞋應(yīng)該知道還有一種策略叫Worst Fit,可以翻譯為最差分配算法。在這種策略下,所有的空閑內(nèi)存塊按照尺寸從大到小排列。當(dāng)需要申請(qǐng)內(nèi)存時(shí),要么分配第一塊,要是失敗。所以這種算法的分配速度最快,而且很少有小碎片,但是容易造成大塊內(nèi)存申請(qǐng)失敗,所以適合待分配內(nèi)存塊比較統(tǒng)一的情況。

以上是“Utility中內(nèi)存分配策略的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


當(dāng)前題目:Utility中內(nèi)存分配策略的示例分析
網(wǎng)頁URL:http://weahome.cn/article/pciosc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部