私の言葉は、これが常に真であれば、低いアドレスが最初に使用され、次にアドレスが増加して高いアドレスにアクセスすることを意味します。順序が変わりますか?
答え1
正確なコンテキストが指定されていません。ただし、これはほとんどの一般的なケース(x86など)に答えることができます。
- NULLポインタが逆参照されるときにメモリアクセスを防ぐために、いくつかの初期アドレス空間を予約します。
- その後、メモリはプロセス開始の詳細に基づいて割り当てられ、ランタイムローダ、対応するデータ、基本バイナリ、対応するデータなどの間で混在させることができます。これらのすべては通常、VMページサイズステップ増分によって割り当てられます。
- その後、ダイナミックライブラリ、ページベースのヒープ割り当てなどに大きな領域が使用されます。 - 再び増分的に割り当てられます。ただし、プログラムがマルチスレッドの場合は、コミットされたスレッドスタックを逆の順序で割り当てます(x86を含むほとんどのプロセッサの場合)。
- その後、ヒープのsbrkベースの順次割り当てを使用できます。
- 次に、メインスレッドスタックを配置します。割り当ては逆の順序でコミットできます(上記を参照)。
- アプリケーションが知っておくべき唯一のことは、明示的な許可なしにこの領域にアクセスしてはいけません。
したがって、ほとんどすべてのプログラムで双方向割り当てを表示できます。
これは他のアーキテクチャでは異なる場合があります。