2017-07-07 7 views
-2

C言語のメモリアドレスとデータ型に関するいくつかの論文を読んでいましたが、内容をかなりよく把握していましたが、数学がうまくいかず、それはインターネット上のどこにでもあります。メモリアドレスとデータ型の紹介

は、私は私が手出力が

int i is stored in 0x6ffc88 
int j is stored in 0x6ffc84 

であると私は読んでいるテキストでは、整数のサイズで私のコンピュータと同じ4バイト(2つのローカル変数

void foo(void){ 
    int i, j; 
    printf("int i is stored in %p\n", &i); 
    printf("int j is stored in %p\n", &j); 
} 

を作成すると)。したがって、int iは4バイトが割り当てられています。しかし、int iint jのメモリアドレスの違いはちょうど4ビット(0100)です。

違いは4バイト(0xffffffff)のように大きいとは限りませんか?

ここで私は混乱していますか?

+2

'int iとint jのメモリアドレスの差はちょうど4ビットです' - いいえ、これらはバイトアドレスです。 – ThingyWotsit

+3

アドレスはバイトアドレスです。 Cはビットアドレッシングを許可しません。 –

+0

CPUのほとんどは、バイトアドレス可能です。 CはCPUと通信し、バイトではないビットで実行されるメモリ読み取り/書き込み操作を要求できます。 Cを使うと、読んだ後でも整数変数に入れても、少なくともバイト単位でメモリ位置を読み書きすることができます。>><<&|ビット演算子 – EsmaeelE

答えて

6

jは、BYTEアドレス0x6ffc84,0x6ffc85,0x6ffc86,0x6ffc87にあり、32ビットです。

は、BYTEアドレス0x6ffc88,0x6ffc89,0x6ffc8a、0x6ffc8bにあり、32ビットです。

8051のようなマイクロコントローラの恐ろしさとは別に、現代的で重要なプロセッサアーキテクチャには、アドレス指定可能なメモリがありません。