-

Memory Models

提供: HI-TECH C for CP/M Fan WIKI(JP)
移動先: 案内検索

HI-TECH Cコンパイラでサポートされている多くのプロセッサーとともに、プログラムにアクセスするアドレススペースもまた1つ以上存在しています。

典型的な、1つのアドレススペースは、アクセスをする際には、他よりも効率的で、またアドレススペースもより大きくなっています。

そのため、プログラムのメモリ消費をきりつめ、アドレッシングにとても経済的な進歩があります (プログラムサイズの最小化と速度の最大化)。 プログラムが必要とするだけの十分なメモリへのアクセスを許可??

このような、異なったアドレススペースの考え方は、K&Rでも、ANSIでも提供されていない(コードとデータにアドレススペースを分ける可能性を認識しているという点以外は)。

言語自体の拡張以外に、コンパイル時に当該プロセッサー用のメモリモデルひとつ以上を作り出すことは可能である。

これは全てのデータ、コードに対してのアドレス指定方法に影響を与えるかのうせいがある。

特定のプログラムのモデルが、プログラムのメモリ管理の要件として依存することを、許容する??

しかしながら、多くのプログラムではデータ構造のたったひとつかふたつだけが大きなアドレススペースへの配置に必要とされるだけで十分である??

プログラム全体に対する"より大きな"メモリモデルは、ほんのいくつかのデータ構造に対応するだけのためにプログラムを大きく、そして遅くする。

個々のデータ構造のためのアドレススペースを、個別に許可することで、これは克服できる。

不幸なことに、これは言語の拡張が必要で、決して望ましいアプローチではない。

このような拡張の影響を最小限にするためには、以下の基準を満たす必要がある。

  1. 拡張は可能な限り一般的な方法で構成する
  2. プロセッサーやOSをまたいだ移植性を最大化した、機種非依存モデルに拡張を合わせる

These goals have been achieved within HI-TECH C by means of the following model: HI-TECH Cの中でこの目的を達成するには、次のようなモデルが必要だ。

コードもデータ用に3つのアドレススペースモデルを定義する


These address spaces are known as the near, far and default spaces.

これらのアドレススペースはnear, far,default として知られるものである。

Any object qualified by the near keyword will be placed in the near address space,

nearキーワードを付加されたオブジェクトはnearアドレススペースに、

farキーワードを付加されたキーワードはfarアドレススペースに その他のオブジェクトはdefaultアドレススペースに配置する。

nearアドレススペースはdefaultアドレススペースのサブスペースだが、defaultfarアドレススペースの(可能であれば変則的な?)サブスペースであるべきだ。

3つのアドレススペースに対応した3種類までのポインターにすべきで、それぞれが自分のアドレススペース内でオブジェクトのアドレッシング、もしくはサブスペースへのアドレッシングを許容する。

これは、オブジェクトのアドレスが、より大きなアドレススペースへのポインターに変換し得ることを意味する。

例えば、nearオブジェクトはそのアドレスをfarのポインタに変換しできる、というように。

しかし、farオブジェクトはnearへのポインタでアドレッシングすることはできない。

実際のところ、defaultアドレススペースはたいていnearとfarのどちらにも良く対応する。

もし、この3つのアドレススペースが同じメモリに対応したとすると、そこではひとつだけのメモリモデルが存在する。

これはX68000プロセッサーで起こる。

defaultのコードやデータのスペースはnearやfarアドレススペースに対応し、メモリモデルは全部で4つになる。

これは8086のケースだ。

HI-TECH Cコンパイラではではfarとnearがサポートされている。

しかし、アドレススペースの正確な対応は、それぞれのプロセッサーの個々の個性と(選択肢があるなら)メモリモデルによって決定される。

これらのキーワードを使って書かれたコードは、上述したモデルの制約に従う、ポータブルなものである。

このモデルはnearとfarを使った他の実装にも良く対応するが、このような実装はフォーマルでポータブルな設計には現れない。