590
回編集
-
差分
ページの作成:「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を使った他の実装にも良く対応するが、このような実装はフォーマルでポータブルな設計には現れない。
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を使った他の実装にも良く対応するが、このような実装はフォーマルでポータブルな設計には現れない。