建立一個結構體裏面包含一個指針用來存放數據。
最初的定義是這樣的
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);
更有效的技術是使用內存池來管理小塊且頻繁申請的內存塊。