私の解決策は次のようになります:
#define malloc(size) mymalloc(size, __FILE__, __FUNCTION__, __LINE__)
... (realloc, calloc, free)
void *mymalloc(size_t size, char *file, char *function, int line)
{
void *data = malloc(size);
addList(data, size, file, function, line);
return data;
}
void myfree(void *data)
{
removeList(data);
free(data);
}
void debugalloc()
{
printList();
}
removeList()は、グローバルリストで「データ」を検索して削除するか、警告を表示します。「debugalloc();」を使用 リスト全体を印刷する必要があります(通常、リストは空であるか、期待するもので十分に満たされている必要があります)。
別のオプション:メモリ管理が断片化されます...(upps、Alexey Frunzeはほんの少し前にコメントセクションでそれを書きました。)
エディス:XML
私はDOMとSAXについてコメントしましたが、このコメントを拡張するだけの感覚があります。
<head><data>...</data><data>...</data>......<data>...</data></head>
SAXの優れた候補です。DOMでは、XML全体が読み取られてメモリに変換されます。これにより、<data>自体が異なるサイズの値で構造化されている場合、メモリが断片化する可能性があります。オペレーティングシステムのメモリモデルが、少量のメモリの悪用に対して機能する場合があります。
SAXを使用すると、データの一部のみをメモリにロードし、消費されるとすぐにデータを削除します。ただし、実装は、ドキュメントのトラバースから、フィード(<data>)および消費/処理(</ data>)を使用する一種のステートマシンに変更する必要があります。