-

差分

移動先: 案内検索

Memory Models

5,265 バイト追加, 2017年8月14日 (月) 07:28
ページの作成:「10man_memorymodel_jp HI-TECH Cコンパイラでサポートされている多くのプロセッサーとともに、プログラムにアクセスするアドレスス...」
10man_memorymodel_jp

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

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

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

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

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

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

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

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

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

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

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

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

# 拡張は可能な限り一般的な方法で構成する
# プロセッサーや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 <strong>near, far</strong> and <strong>default</strong> spaces.

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

Any object qualified by the near keyword will be
placed in the <strong>near</strong> address space,

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

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

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

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

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

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

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

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

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

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

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

これは8086のケースだ。

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

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

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

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

案内メニュー