1

C ++の本を読んでいますが、答えが見つからないようです。私が知っているのは、関数を作成するときなどの動的メモリ割り当てだけです。

void memoryleak(){
int * ptr = new int; 
}

メモリを割り当ててそのメモリをポインタに返しますが、ポインタはローカル変数であるため、memoryleak()の後、メモリの参照を含むポインタは静的であるため割り当てが解除され、割り当てられたメモリが失われ、プログラムに再利用することはできません。

しかし、それはメモリが永久に失われることを意味するのでしょうか、それともこのコードスニペットをコンパイルした後のようにプログラムが終了するまでしか失われないのでしょうか。

main(){
int * ptr = new int; 
}

プログラムが終了した後、メモリは割り当てられたままになりますか、それとも割り当てが解除されますか?割り当てられたままの場合、PCを再起動すると、PCは使用されているすべてのメモリの割り当てを解除しますか?好奇心から、彼らが(割り当てで)使用するメモリについての別の質問は、RAMですか?:)

4

4 に答える 4

4

答えはあなたが誰に尋ねるかによります。C ++言語に関する限り、メモリは失われます。それを取り戻す方法はありません。

しかし、合理的なOSはどれも、どのメモリがどのプロセスに割り当てられているかを知るのに十分スマートであり、プロセスが終了すると、そのすべてのメモリを再利用します。

したがって、実際には、その答えは、プロセスが存続している間だけメモリがリークされるということです。その後、OSはそれをすべてすくい取り、他の場所で再利用する準備が整います。

もちろん、これはWindows、Linux、OSXなどの一般的な主流のOSの動作です。十分に原始的なOSはこれを行わないかもしれません。

于 2012-05-19T10:25:35.687 に答える
4

プロセスが終了すると、すべてのリソースが再利用されます。これには、アドレス空間、スケジューリングプリミティブなどが含まれます。

于 2012-05-19T10:29:37.133 に答える
2

プログラムが終了すると、OSはプロセスが割り当てたすべてのメモリを再利用します。プログラムの存続期間中にリークしたメモリは、プログラムが終了すると、使用可能なメモリのプールに戻されます。

でメモリを割り当てるとnew、これはによってサポートされRAMます。使用可能なメモリよりも多くのメモリを割り当てると、コンピュータは代わりにディスク上のスワップファイルを使用する場合があります。

于 2012-05-19T10:09:06.900 に答える
1

プログラムが要求するすべてのメモリは、プログラムの終了時にOSに解放されるためメモリが失われることはありません。プログラムが終了すると、メモリは他の人が利用できるようになります。

好奇心から、彼らが(割り当てで)使用するメモリについての別の質問は、RAMですか?

はい、メモリはRAMです。

于 2012-05-19T10:09:00.397 に答える