2012-03-19 8 views
1

誰でも私はCを使用してプロセッサのアドレスラインの数を決定する方法を教えてくださいできますか?これは、レジスタラインの数がレジスタのサイズに比べて異なることがあるので(例えば、8086ではアドレスラインが20であり、レジスタのサイズが16であるため)、プロセッサレジスタのサイズと同じであってはならない。Cを使用してアドレスラインとRAMワードサイズの数を決定する

同様に、Cプログラムを使用してRAMのワードサイズ(各アドレス可能な場所のサイズを意味する)を見つけることができますか?

+0

"ワードサイズ"とは、DDRバーストのサイズを意味しますか? –

+0

ddrバーストとは何か、私はそれを知らない。ワードサイズでは、一意的にアドレス可能な1つの記憶場所を意味する。 – mezda

+0

私はあなたが実際に求めていることを理解しようとしています。具体的には、「一意にアドレス指定可能な1つのストレージロケーション」という意味です。 CPUに関する限り、メモリはバイト(char)レベルで一意的にアドレス可能です。 –

答えて

3

これらのほとんどすべてに対する簡単な答えは、(少なくともC言語で定義された移植可能な方法では)あなたができないことです。

たとえば、アドレス行は特に厳しいものです。たとえば、相当数の物理メモリチャネルに接続された2つまたは3つの完全に別々のアドレス空間があり、それぞれ固有のサイズを持つ可能性があります。それと並行して、プロセッサ上にN本のアドレスラインがあっても、実際に接続されているアドレスラインよりもメモリが少なくなることがあります。

つまり、sizeof(void *) * CHAR_BITは、アドレス可能なメモリの量は大きく異なるかもしれませんが、通常、アーキテクチャによって理論的に許容されるアドレス線の数の少なくとも妥当な近似値を与えます。

標準では、intは「プロセッサによって提案された自然なサイズ」とされています。プロセッサの整数レジスタのサイズと同じであることが多い(ただし必ずしもそうとは限りません)。

+0

返事をありがとう、私はこれにもう一つの疑問があります。 Cでは、各バイトは個別にアドレス可能です。しかし、あなたが指摘したようにintの大きさをRAMのサイズとすると(つまり、一般的に2または4のいずれかの場合のワードサイズ)、それは各ワード(2または4バイト)がそれぞれではなく個別にアドレス指定可能であることを意味しますバイト。私はこれを理解するのが間違っている、これを明確にしてください。ありがとう – mezda

+0

@ user1182722:本当に答えはありません。Cによれば、個々の 'char'sに対処することができなければなりませんが、ハードウェアによって直接サポートされているかどうかは疑問の余地があります。これは最新のマシンではありますが、必ずしも常にそうではありません(例えば、 64ビットワードでのみアドレス指定されたメモリであり、「char *」は最上位ビットにメモリアドレスを有し、下位ビットにはワード内のオフセットを有する)。 –

+0

返信いただきありがとうございますが、私はこれを正確に理解することができません。これを少し説明する時間を見つけることは可能でしょうか。それは大きな助けになるでしょう。どうもありがとう。 – mezda

0

私の知る限り、両方の質問に対する答えは実装定義です。これらのことはC言語では標準化されていませんので、テストを書くための標準的なコードはありません。あなたはそれらを推測できるかもしれませんが、それはあなたのコードを移植可能にしません。特定のコンパイラスイートがこれらの機能を提供するかもしれませんが、あなたのコードを移植することはできません。

関連する問題