35654


プログラミングの参考書などでよく、メモリー空間の先頭にスタックがあり、後方にヒープがある図を見かけます。しかし、今時のOS上の仮想空間も実際に図の様に連続で、つながっていて、そのような位置関係にあるのでしょうか。それとも間のどこかに、セキュリティ的なこと以外に、実メモリが確保されておらず、アクセスできない領域があったりするのでしょうか。


CC BY-SA 3.0
2017-06-16T08:30:39.897
35637
2017-06-17T01:49:23.860
3974
question
メモリ管理
今時のOSでのヒープとスタックの位置関係について


メジャーなOSの１つとしてWindowsであれば[VMMap](https://technet.microsoft.com/ja-
jp/sysinternals/vmmap.aspx)というツールが提供されています。もしWindowsをお使いでしたらご自身で確認してみてはどうでしょうか？

Windowsであれば後方はシステム領域です。その手前にはImage（実行ファイル・DLL）が配置されていました。スタックもヒープも複数存在します。  
スタックが複数存在する理由は、スレッド毎にスタックが必要になるためです。そのため「前の方」ではありますが「先頭」ではありません。  
ヒープが複数存在する理由は、ヒープ確保の際にスレッド間ロックを排除するため、つまりパフォーマンスのためです。複数存在するため「後方」に配置する理由はなく、メモリー空間内に自由に点在していました。

これらはWindows以外にも当てはまる部分もあるかと思います。

> それとも間のどこかに、セキュリティ的なこと以外に、実メモリが確保されておらず、アクセスできない領域があったりするのでしょうか。

わかりませんが、64bit
OSになるとアドレス空間が広すぎて使い切れていないのは事実で、その空いた領域にアクセスさせないのはセキュリティが理由だと思います。

[![VMMapのスクリーンショット](https://i.stack.imgur.com/IMj9V.jpg)](https://i.stack.imgur.com/IMj9V.jpg)


CC BY-SA 3.0
2017-06-17T01:49:23.860
35654
2017-06-17T01:49:23.860
4236
35637
answer