2012-05-04 5 views
0

スタックとヒープの衝突は、両方を別々のセグメントに置くだけで済むと思います。そのように実装されなかった理由は何ですか?スタックヒープ衝突が異なるセグメントに実装されていない理由

+2

システムのどのようなことをいっているのですかあなたはどちらに比べているのですか? – TJD

+0

私は一般的なプログラミング言語の概念について話しています。例えばC++コンパイラでは... – srjt

+2

@ user1096656 10000種類の異なるシステム用に10000種類のC++コンパイラがあります。これらのシステムの一部では、セグメンテーション(または任意の形式の保護されたメモリ)は存在しません。多くのシステムでは、スタックヒープコリジョン*によってセグメンテーションフォルトまたはページフォルトが発生します。なぜ、セグメンテーションが、保護されたメモリを持たないシステムでスタックヒープの衝突を防ぐために使われないのかを尋ねていますか?回答:保護されたメモリがないためです。あるいは、ガーベージ・ページを使用するシステムでセグメンテーションが使用されない理由を尋ねていますか?または、他の何か? – sepp2k

答えて

0

コンパイラは、オペレーティングシステムのABIに準拠するコードを生成します。したがって、コンパイラのメモリモデルは実際にオペレーティングシステムのメモリモデルに従います。 Linux、* BSD、またはオーバーラップするコード/データ/スタックセグメントを持つフラットVAを持つ他のOSについて質問するなら、その方法をプログラムする方が簡単であり、メモリ管理が大幅に簡素化されます。ヒープスタックの衝突を防ぐことができることは、メモリ管理の容易さの点でOSが緩和するための利得が小さすぎることである(フラットVAは既にを十分に管理している)。

OS/2に何が起こったのかを参照してください - プロテクトモードでフルセグメントを使用していた...