【初月無料キャンペーン中】gooドクター

あの、64bitpcの1つのメモリは64bitですよね? だとしたら、文字aはint aは1バイトなので、 64bit中の1バイト(0x61)を使うのでしょうか? また、a,bとふた文字の場合は 64bit中の1バイト(0x61)を使い(残った7バイトは0となる)、その次の64bitメモリに64bit中の1バイト(0x62)を使うのでしょうか?

gooドクター

A 回答 (9件)

short→2バイト


long→4バイト
    • good
    • 0

余り、そういうことは考えなくていいと思います。


64bit単位でレジスタやメモリとデータのやり取りをしているとしても、
8bitのbyteデータを100個を1つのファイルに保存すると100bytesしか使いません。FavBinEditなどで見るときれいに入っています。
    • good
    • 0
この回答へのお礼

わがんね。

お礼日時:2021/08/11 15:55

>あの、64bitpcの1つのメモリは64bitですよね?


違います。
64bit PCの「メモリ」ではなく「レジスタ」が64ビットです.

おまけ
私の64bit PCの「メモリ」は8GBですよ。
内訳は4GBのメモリが2つあって、合計で8GBです。

私の64bit PCの「メモリ」は(少なくとも)8ビット単位、16ビット単位、32ビット単位、64ビット単位で読み書きできるように設計されています。
    • good
    • 0

昨今のコンピューター (一般に使用される PC を含めて) は、バイトマシンと呼ばれる、アーキテクチャーを採用しています。


参考 : https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4 …
対義語はワードマシンです。

メモリーの管理はバイト単位です。アドレスもバイト単位に振られます。
例えば、メモリを 4GBytes (正確には 4GiBytes) 搭載。などとスペック表に書かれていますが、4,294,967,296 バイトのデータを格納できると言うことです。

64bit PC と行った場合、定義はいろいろとありますが、大雑把に言えばレジスタが 64bit で、一度に読み書きできるデータも 64bit と言うことになります。

64bit は 8Bytes ですので、例えばあるデータをアドレスの 0x0000000010000000 からを格納したとすれば、次のデータは 0x0000000010000008 から格納されることになります。

ただし、プログラムで扱うデータがいつも 64bit だけだと不便なので、一般的には、1, 2, 4, 8 バイトのデータを扱うことができます。

文字データ (C言語では char) は1バイトなので、メモリーに格納する時も1バイトしか必要としません。一文字格納するのに8バイト使用するのは非効率です。

1文字 (例えば 'A') を格納する時は、8バイトの領域を必要として、0x61, 0x00, 0x00 0x00 0x00, 0x00 0x00 0x00 と格納されると言うことはないです。
1文字格納する時は1バイト必要として、2文字格納する時は2バイト必要とします。ただし、C言語で文字列を格納する時には、Null 文字で終端するので、1文字で2バイト、2文字で3バイト必要とします。
    • good
    • 0

ご質問者様の疑問は、データのアドレッシングに要するデータサイズと、アドレスが指し示すデータ(実態の)のサイズ、を混同していることに起因しているように思われます。


ご質問ではあまり明確ではありませんが『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が異なっても変わりません。
    • good
    • 1

処理系やコンパイルオプションで違います。

    • good
    • 0

>>わたしの考えは正しかったのでしょうか?


その1文字を汎用レジスタに取り込んだら、右8bitが使われ、左側を0にするか/しないかは、メーカのcpu回路によります。

コンピュータは、文字なのか、数字なのかの区別は有りません。

プログラム同士の紳士協定で、「ここは文字として扱ってください」「ここは数字として扱ってください」という約束事です。
    • good
    • 1
この回答へのお礼

ありがとうございます。

お礼日時:2021/07/29 19:57

64bitと言う意味は、汎用レジスタが64bitだという事。


命令が格納されているアドレスを参照するのも64bitレジスタで行なう。
CPUが処理する機械語も64bit構成。

汎用レジスタやCPUが何bitで有ろうが、メモリのアドレスはバイト単位に振られる。
そのバイト単位に1文字ずつ格納される。

そのメモリのアドレスを64bitを使って表現される。
って事です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
と言うことはわたしの考えは正しかったのでしょうか?

お礼日時:2021/07/29 19:42

「1つのメモリ」ってなに? どう数えるの?



「文字aはint aは1バイト」ってどういうこと?
    • good
    • 3

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング