簡単な質問:
32 ビット マシンでは、ポインタへのポインタ ( **p
) は 4 バイトになりますか?
論理的には、ポインタは単なるメモリ アドレスです。32 ビット アドレスを持つマシンに格納されたエンティティのメモリ アドレスは、ほぼ確実に 4 バイトです。したがって、格納されたポインタのメモリ アドレスは 4 バイトです。したがって、ポインターへのポインターは 4 バイトです。これはいずれも、ISO C 標準では約束されていません。これは、ほぼすべての実装が結果として得られる方法です。
はい... 4バイトになります...しかし、保証されていません。
正しい。通常、ポインタは固定サイズです。32 ビット マシンでは、通常 32 ビット (= 4 バイト) です。
他の人は、それが最も確実に32ビットまたは4つの8ビットバイトであるとすでに述べています。
ただし、ハードウェアとコンパイラによっては、それよりも少ない場合も多い場合もあります。
マシンが 32 ビット境界で 32 ビット単位としてのみメモリをアドレス指定できる場合、すべての 32 ビット メモリ セルの8 ビット部分 ( chars
/ ) をアドレス指定してアクセスするには、より大きなポインターが必要になります。bytes
ここでコンパイラが異なるサイズのポインターを持たないと決定した場合、すべてのポインター (ポインターへのポインターを含む) は 34 ビット長になります。
同様に、プログラムが非常に小さく、64KB に収まる場合、コンパイラーはすべてのポインターを 16 ビットに削減できる可能性があります。
通常、はい、32 ビット マシンのアドレスは 4 バイトになります。
仮定をしたくない場合の最善の策は、古いものを実行することですsizeof(p)