0

まず、下の私のずさんな図で申し訳ありません。

malloc() の背後にあるロジックを理解したい。これはブルームバーグのインタビューで私に尋ねられました。

Que:OS に 2 バイトのメモリしか残っていないとします (以下に示すように)。ここで、2 バイトに対して malloc() するとします。(白い領域はバイト単位の空き領域を示し、黒色はバイト単位の使用済み領域を示します。したがって、2 バイトの空きメモリ領域と 2 バイトの使用済みメモリ領域があります)。
メモリ領域

  • malloc() は何をしますか?
  • そのようなシナリオでOSは何をしますか?
  • malloc() は成功しますか? 2 バイトが返されますか? はいまたはいいえで説明します。

PS:- Google で調べたところ、ほとんど OS に依存していることがわかりました。しかし、私はそれについてもっと洞察したいと思います。

ありがとうございました!

4

1 に答える 1

1

ここにはいくつかの問題があります(以下の内容のほとんどはLinuxに固有のものですが、他のプラットフォームでも同様になると思います)。

  • の一般的な実装でmallocは、2バイトのみが割り当てられることはありません(効率と配置の問題のため)。たとえば、標準のGNU実装では、デフォルトで最低16バイトが割り当てられていると思います。

  • mallocOSによってすでに提供されているメモリ領域のユーザースペースで動作します。mallocOSは、使用可能なものを使い果たし、ヒープ用により大きなメモリ領域を要求する必要がある場合にのみ関与します。

  • OSは、メモリ領域をページ単位(通常は4kB)でプロセスに割り当てる必要があります。これは、ハードウェアメモリ管理ユニット(MMU)の基本単位であるためです。したがって、残り2バイトしかないOSについて話すのは意味がありません。

  • OSは通常、現在物理メモリにマップされていないメモリ領域を割り当てます(これはオーバーコミットと呼ばれます)。物理マッピングは、プロセスがメモリにアクセスしようとしたときにのみ作成されます。

  • OSの物理メモリが少なくなると、ページフレーム再利用と呼ばれるシステムを使用して、他のプロセスからページフレームを盗みます。

つまり、いくつかの理由から、あなたの質問で説明されているシナリオが発生する可能性は低いです。

于 2013-03-20T00:17:08.323 に答える