内部ダイナミクスメモリ管理
-
28-10-2019 - |
質問
私は学生であり、ダイナミクスメモリ管理についてもっと知りたいです。 C ++の場合、Calling Operator new()は、ヒープ(フリーストア)の下にメモリブロックを割り当てることができます。実際、私はそれを達成する方法全体を持っていません。
いくつかの質問があります:1)OSがメモリブロックを割り当てることができるメカニズムは何ですか?私が知っているように、ファーストフィット、ベストフィット、最悪の適合などの基本的なメモリ割り当てスキームがあります。 OSはそのうちの1つを使用して、ヒープの下でメモリを動的に割り当てますか?
2)Android、iOS、ウィンドウなどのさまざまなプラットフォームの場合、メモリブロックを割り当てるために異なるメモリ割り当てアルゴリズムを使用していますか?
3)C ++の場合、Operator new()またはmalloc()を呼び出すと、メモリアロケーターはヒープでメモリブロックをランダムに割り当てますか?
誰でも私を助けることができることを願っています。
ありがとう
解決
malloc
システムコールではなく、ライブラリです(libc
)必要なサイズの自由なメモリのアドレスを提供するために、その内部構造の一部を通過するルーチン。プロセスのデータセグメント(すなわち、使用できる仮想メモリ)が、のロジックに従って「十分に大きい」場合にのみ、システムコールが発生します。 malloc
問題。 (Linuxでは、データセグメントを拡大するためのシステム呼び出しは brk
)
簡単に言った、 malloc
微調整されたメモリ管理を提供しますが、OSはそのプロセスで利用可能になった粗い、大きなメモリのチャンクを管理します。
さまざまなプラットフォームだけでなく、異なるライブラリも異なるものを使用しています malloc
;いくつかのプログラム(例: python
)独自の使用パターンを知っており、そのようにパフォーマンスを向上させる可能性があるため、代わりに内部アロケーターを使用します。
についての長い記事があります ウィキペディアのマロック.