可能性の重複:
How is heap and stack memories managed, implemented, allocated?通常、ヒープはどのように実装されていますか?
こんにちは、 私の質問は、ヒープではなく、データ構造が、動的メモリ割り当てのために使用されるメモリのエリアについてです。
プログラムをC(または多分C++)とコード深度のどこかに書いていると仮定して、malloc()の呼び出しが行われます(あるいは、C++の場合new演算子が呼び出されます)。今、割り当てられたメモリの場所は何ですか?コンパイラ(リンカ?)は、ヒープとして使用されるデータセグメントを追加しますか?そのセグメントのサイズはどのように決定されますか? 「ヒープセグメント」全体よりも大きなメモリを割り当てるとどうなりますか?ヒープは拡張されますか?はいの場合、どうですか?
これで保護はどのように機能しますか?メモリを動的に割り当てると、プロセスだけがプロセスにアクセスできます。他のプロセスがそこで読み書き操作を実行しようとすると、エラーが発生します。ページは特定のプロセスに属するとマークされていますか? –
@grigory、no。ページはページテーブル(x86ではPまたはVビット)に有効または無効としてマークされます。PTEにはR/Wビットもあります。 「アクティブな」ページテーブルのセットは、プロセスコンテクストスイッチ上で新たにアクティブなプロセスのものに「切り替える」。すべてのプロセスには独自のページディレクトリ(==ページテーブルセット+ページ属性セット)があります。 –
@Grigory:プロセスのページは他のプロセスには存在しません。 OSは、仮想ページを実ページにマッピングします。あなたは本当に仮想メモリをチェックアウトする必要があります。 – Puppy