4

malloc()と操作がヒープからメモリを動的に割り当てることはわかってnewいますが、ヒープはどこにありますか?各プロセスには、動的割り当て用の名前空間に独自のプライベートヒープがありますか、それともOSにはすべてのプロセスで共有されるグローバルヒープがありますか。さらに、教科書を読んだところ、メモリリークが発生すると、次にコンピュータを再起動するまで、不足しているメモリを再利用することはできません。この論文は正しいですか?答えが「はい」の場合、どのように説明できますか?

お返事をありがとうございます。

よろしく。

4

3 に答える 3

8

メモリは、プロセス仮想メモリのユーザーアドレス空間から割り当てられます。また、プロセスが終了すると、すべてのメモリがOSによって再利用され、コンピュータを再起動する必要はありません。

于 2010-04-09T08:49:33.097 に答える
1

通常、CランタイムはさまざまなOS APIを使用して、プロセスアドレス空間の一部であるメモリを割り当てます。割り当てられたメモリ内で、ヒープを作成し、mallocまたはnewへの呼び出しを介してそのヒープからメモリ自体を割り当てます。

この理由は、多くの場合、OS APIはコースグレインであり、メモリを大きなチャンク(ページサイズなど)で割り当てる必要があるのに対し、アプリケーションは通常、一度に少量のメモリを割り当てたいためです。

于 2010-04-09T09:15:47.437 に答える
0

関心のあるOSについては言及していません。それはまさに直接の答えがないことを意味します。

タネンバウムのようなOSについての本を調べてみてください

于 2010-04-09T08:48:43.547 に答える