91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Utility中內存分配策略的示例分析

發布時間:2021-12-22 10:14:28 來源:億速云 閱讀:220 作者:小新 欄目:互聯網科技

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

從系統內存池(也就是堆)里分配內存,主要用的是ANSI定義的這幾個函數
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還實現了一個專門與calloc()配合的cfree()
typedef int _Vx_STATUS;typedef _Vx_STATUS STATUS;STATUS cfree(char *pBlock);

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

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

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,可以翻譯為最優分配算法。在這種策略下,所有的空閑內存塊按照尺寸從小到大排列,并使用AVL(平衡二叉樹)維護。當需要申請內存時,從Root節點開始查找,滿足需求且尺寸最小的內存塊被分配。這種算法會保留大的內存塊,提高了整體的分配成功幾率,但會多出一些非常小的碎片,不過時間復雜度只有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);    }
當然了,不管哪種策略,在釋放內存時,都會自動與前后的空閑塊(如果有的話)合并。否則,系統運行一會就都是碎片了。  

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

以上是“Utility中內存分配策略的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

年辖:市辖区| 蓝山县| 衡南县| 新昌县| 乡城县| 乳源| 峨山| 石柱| 武隆县| 海晏县| 萨迦县| 达日县| 安阳县| 泰和县| 凤阳县| 永泰县| 临夏市| 扶沟县| 阿图什市| 双牌县| 文化| 平舆县| 四子王旗| 汾西县| 五华县| 湛江市| 云安县| 长春市| 绥化市| 岐山县| 霍林郭勒市| 赫章县| 枝江市| 桐城市| 阿尔山市| 开江县| 福泉市| 安多县| 兰州市| 玛曲县| 武陟县|