メモリを解放してリストに割り当てる方法を教えてください。次のコードでは、リストを消去してリストへのポインタを削除しても、メモリを解放しません。私はシステムモニタでプログラムが撮影したメモリを見ることができます。 リストに割り当てられたメモリを効率的に削除する方法はありますか?リストに割り当てられたメモリを解除する方法は?
struct Plot
{
int BUFFER[65535];
int BUFFER1[65535];
int BUFFER2[65535];
int BUFFER3[65535];
int BUFFER4[65535];
};
int main(int argc, char *argv[])
{
std::list<Plot> *LIST= new std::list<Plot>();
Plot PLOT;
int i=0;
while(i<1500)
{
(LIST)->push_back(PLOT);
i++;
usleep(100);
}
LIST->clear();
delete LIST;
while(1)
{
usleep(100);
}
}
割り当てられたメモリが正しく解放され、リークはありません。 C++ライブラリの内部では多くのことが隠されているため、システムモニタに依存することはできません。たとえば、解放されたメモリはすぐにシステムに返されないかもしれませんが、ライブラリはそれ自身の空きメモリプールにシステムから直接メモリを要求するのではなく、プールから後続の割り当てを行います。それは完全に実装に依存します。 –
厳しいメモリ管理が懸念される場合は、カスタムアロケータの使用を検討してください。 –
これは単なるサンプルコードです。私はメモリが無限に増加している同様のコードを持っています。 Valgringは、新しい演算子でのメモリリークも示します。 –