Cを使用してプロセッサのアドレス行数を決定する方法を教えてもらえますか?アドレスラインの数はレジスタのサイズと比較して異なる可能性があるため、これをプロセッサレジスタのサイズと等しくすることはできません(たとえば、8086ではアドレスラインは20で、レジスタのサイズは16です)。
同様に、Cプログラムを介してRAMのワードサイズ(アドレス可能な各場所のサイズを意味する)を見つけることができますか?
Cを使用してプロセッサのアドレス行数を決定する方法を教えてもらえますか?アドレスラインの数はレジスタのサイズと比較して異なる可能性があるため、これをプロセッサレジスタのサイズと等しくすることはできません(たとえば、8086ではアドレスラインは20で、レジスタのサイズは16です)。
同様に、Cプログラムを介してRAMのワードサイズ(アドレス可能な各場所のサイズを意味する)を見つけることができますか?
これらのほとんどすべてに対する簡単な答えは、(少なくともC自体によって実際に定義される移植可能な方法では)できないということです。
たとえば、アドレス行は特に難しいものです。たとえば、かなりのDSPには、同じ数の物理メモリチャネルに接続された2つまたは3つの完全に別個のアドレス空間があり、それぞれが一意のサイズを持つ可能性があります。それに加えて、プロセッサにN個のアドレスラインがある場合でも、実際に接続されているメモリよりもメモリが少なくなる可能性があります(多くの場合、そうなります)。
とは言うsizeof(void *) * CHAR_BIT
ものの、通常、アドレスラインの数の少なくとも妥当な概算が得られます。アドレス可能なメモリの量はかなり異なる場合がありますが、少なくともアーキテクチャで理論的に許可されている数です。
標準ではint
、「プロセッサによって提案された自然なサイズ」であると想定されています。多くの場合(常にではありませんが)、これはプロセッサの整数レジスタのサイズと同じです。
私の知る限り、両方の質問に対する答えは実装定義です。C言語にはこれらの標準化された概念がないため、テストを作成するための標準コードはありません。あなたはそれらを推測することができるかもしれませんが、それはあなたのコードを移植可能にしません。特定のコンパイラスイートがこれらの機能を提供する場合がありますが、それでもコードを移植可能にすることはできません。