0

私は疑問に思っていました...次のような配列を動的に割り当てたとします

array = calloc(n, sizeof(float));

または似たようなもの。また、n が非常に大きな数 (引数のために ~ 100 万) の場合、最後にそうしなかった場合、Linux がヒープ メモリをクリアするのにどれくらいの時間がかかりますfree()か? 私は、OS が動き回って、解放されていない未使用のヒープメモリ領域をクリアすることを知っています。ただし、それを行うのにかかる時間はOSに依存すると思います。

4

3 に答える 3

2

プロセスが(自発的または強制的に)終了した場合、そのすべてのヒープメモリは、Windows、Linux、OSXなどのオペレーティングシステムによってすぐに再利用されます。

于 2012-11-01T09:24:22.333 に答える
0

プロセスが終了すると、メモリが解放されます。プロセスが終了すると、すべてのメモリ、開いているファイルハンドル、およびプロセスによって開かれたすべてのリソースがシステムによって閉じられます。

于 2012-11-01T09:23:59.477 に答える
0

このような大量のメモリ要求が malloc/calloc によって満たされる可能性は低いです。NULL を返す可能性があります。

I know any OS would go around and clear un-freed and unused heap memory areas.

いいえ、OS は未使用のヒープ領域を探しません。動的にメモリを正常に割り当てたと仮定すると (小さいか大きいかは関係ありません)、OS はプロセスが実行されている限りメモリの割り当てを解除しませんfree

プロセスがメモリを要求し続けると、Linux の Out Of Memory キラーによって強制終了される可能性があります。

于 2012-11-01T09:29:28.100 に答える