避免內存碎片的小技巧

建立一個結構體裏面包含一個指針用來存放數據。

最初的定義是這樣的

typedef struct _NODE

{

    char *pData;

    int nLength;

} Node;

使用的時候:

Node *pNode = (Node*)malloc(sizeof(Node));

pNode->Data = (char*)malloc(pNode->nLength);

這樣是沒有任何問題的,但是卻有內存碎片的產生,本來這個pNode 和 p->Data就是一起用的,所以最好分配到一個內存的地方。

 

解決辦法:

typedef struct _Node

{

   int nLength;

    char pData[1];

} Node;

 

具體的使用方法:

int nDataLength = (nLenght == 0 ? 1 : nLength) - 1;

Node *pNode = (Node*)malloc(sizeof(Node) + nDataLength);

更有效的技術是使用內存池來管理小塊且頻繁申請的內存塊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章