なぜ0x00400000にしたかと言うのは具体的に答えられませんが、
Linux, Unix系やWindowsに限らずParOSと呼ばれる独自OSでも0x00400000が実行ファイルのスタートアドレスとして指定されています。
コンパイラによっては変更することができるようです。
/BASE オプションの利用
プログラムのベース・アドレスを設定し,
実行形式ファイルまたは DLL の基本場所を置換します
(実行形式ファイルでは 0x400000,DLL では 0x10000000)。
https://jp.xlsoft.com/documents/intel/cvf/vf-html/pg/pg04_02_04.htm
「memory map 0x00400000」などで検索すると色々ヒットします。
0x400000: 実行ファイルの実行可能領域
0x600000: 実行ファイルの実行不可領域
0x602000: ヒープ領域
0x7ffff7a1a000: 共有ライブラリ(libc)
0x7ffffffde000: スタック領域
2016/09/18 09:23 AM (雑記追記)
私もこの質問を見てなぜ0x00400000なのか気になりましたが、
HogeAnimalLover様が書かれている通り「作った人がそう決めたから」という筋が大いにありそうですね。
0x003FFFFFまではシステム領域として確保しておけば足りるだろうなどと考えたのかと推測します。
似た話でWake-on-LanのマジックパケットのMACアドレスを何故16回繰り返すのかというのもあります。
「16回でなく、15回でも、17回でも、32回でもよかったんじゃないか…」といった話です。
おそらく作者が「16回MACアドレスを繰り返せば他のパケットと偶然一致することはないだろう」などと考え、仕様を制定したのかと推測します。
参考文献
ELF実行ファイルのメモリ配置はどのように決まるのか - ももいろテクノロジー
http://inaz2.hatenablog.com/entry/2014/07/27/205913
ParOS - 15ページ目
https://www.toppers.jp/docs/tech/park/PartitionOS_SafetyConcept.pdf
windowsにおいて、デバッグソフトを用いて実行中のプロセスをアタッチし... - Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10131267615
2016/09/27 01:45 編集
2016/09/27 01:57 編集