2

ウィキペディアやその他のリソースでは、x86 プラットフォーム (リアル モード) のコンパイラで使用できるさまざまなメモリ モデルについて説明しています。

私は、小さなモデルと小さなモデルの違いを見ることができます (小さなモデルではコード、スタック、およびデータ セグメント レジスタが同じセグメントを指し、小さな CS では 1 つのセグメントを指し、SS と DS は別のセグメントを指します)。およびコンパクト (CS、SS、および DS は 3 つの別個のセグメントを指します) ですが、CS が 1 つのセグメントを指し、SS および DS が別のセグメントを指しているように、小と中の違いはわかりません。

中型モデルは、複数のコード セグメントを持つプログラムを対象としていることは理解していますが、その違いはどのように実現されているのでしょうか? それは正確に何を変えますか?

4

1 に答える 1

1

Turbo C++ 組み込みヘルプから (メニュー: [オプション] -> [コンパイラ] -> [コード生成...] -> [モデル]、[F1] を押します)

小さな

平均サイズのアプリケーションには小型モデルを使用してください。

コード セグメントとデータ セグメントは異なり、重複していないため、64K のコードと 64K のデータとスタックがあります。Near ポインターは常に使用されます。

中くらい

中型モデルは、メモリに多くのデータを保持しない大規模なプログラムに最適です。

far ポインターはコードに使用されますが、データには使用されません。その結果、データとスタックは 64K に制限されますが、コードは最大 1MB まで占有できます。

それで、あなたはそれを持っています。中間モデルでは、far ポインターを使用してコードにアクセスし (コードには far 呼び出し命令と far 戻り命令があり、far 関数ポインターで操作します)、複数のセグメントを持つことができます。標準の 16 ビット DOS .EXE ファイル形式は、複数のセグメントをサポートしています。小さなモデルでは、すべてのポインターが近くにあるため、プログラム内のデフォルトのコード セグメントを変更することはできません。

于 2012-08-15T16:57:33.543 に答える