質問: あの、64bitpcの1つのメモリは64bitですよね? だとしたら、文字aはint aは1バイトな あの、64bitpcの1つのメモリは64bitですよね? だとしたら、文字aはint aは1バイトなので、 64bit中の1バイト(0x61)を使うのでしょうか? また、a,bとふた文字の場合は 64bit中の1バイト(0x61)を使い(残った7バイトは0となる)、その次の64bitメモリに64bit中の1バイト(0x62)を使うのでしょうか?
回答: ご質問者様の疑問は、データのアドレッシングに要するデータサイズと、アドレスが指し示すデータ(実態の)のサイズ、を混同していることに起因しているように思われます。 ご質問ではあまり明確ではありませんが『64bitpcの1つのメモリは64bitですよね? だとしたら...』の"1つのメモリは64bit"を、ご質問者様がどの様な意味で使っているのかで解釈が変わります。 ●64bitpc データのアドレッシングに要するデータサイズが64bit(8バイト)になります。 char *a = 0; // ポインタであることにご注意。 printf ( "pointersize = %d\n", sizeof ( a ) ); ...を64bitpcで実行すれば 8 が表示され、32bitpcで実行すれば 4 が表示されます。 ●データサイズ char, short int, int, long int, float, double 等のデータのサイズは、32bit / 64bit で変わるもの、あるいは変わらないもの、があります。 データサイズは64bit / 32bitで変わる場合がありますが、os(windows / linux ...)によっても異なる場合があり厄介です。 一方のアドレッシングのサイズはハードウエアの違いに起因するため、osが異なっても変わりません。