これは私が持っている非常に基本的なメモリアドレスの質問です:
これが私のスニペットです:
int *i = &a[0];
printf("ptr i = %p, i = %x, (i+1) = %p, (i+1) = %x\n", i, i, i+1, i+1);
出力は次のとおりです。
ptr i = 0x7fff5fbff700、i = 5fbff700、(i + 1)= 0x7fff5fbff704、(i + 1)= 5fbff704
これは32ビットカーネルです。
私が実際に得られないのは次のとおりです。
アドレス0x7fff5fbff700
とアドレス0x7fff5fbff704
は32ビットまたは4バイト異なるはずです。
アドレスの各「要素」0x7fff5fbff700
を1バイトと見なすと、そうです。2つのアドレスが4バイト異なることがわかりますが、その場合、アドレス0x7fff5fbff704
は12 * 4=48バイトになります。どうしてそれも可能ですか?
私はそれをLinuxで実行しました、そしてこれは私が得るものです:
ptr i = 0xffff82cc、i = ffff82cc、(i + 1)= 0xffff82d0、(i + 1)= ffff82d0
(i + 1)-1を印刷しようとすると、常に0x1になります
しかし、0xffff82ccと0xffff82d0の32ビットまたは4バイトの違いがわかりません。
0xffff82cc = FFFF 1000 0010 1010 1010 0xffff82d0 = FFFF 1000 0010 1011 0000
説明してください