回答受付が終了しました

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

回答(11件)

0

64bitプロセッサと呼ばれる用語はそれほど 厳格に定義されたものでもないようです。 (もしかすると定義されており、私が知らない だけかも知れませんが) 「64bitの整数データアクセスや演算が他の長さ の整数に較べて有利である」 といった程度の幅のある意味になります。 64bitプロセッサだから32ビットとか16ビットとか 8ビット整数を取り扱えないというわけではありま せんし逆に8bitプロセッサと呼ばれるものでも、 64bit整数計算命令を持つものがあってもおかしく ありません。 64bitプロセッサ向けのプログラムでも64bitに 8個の8bit整数を置く場合もあることでしょう。 つまりコンパイラオプションが「記憶効率優先」 の場合は64bit中に8個の8bit整数を詰め込むこと でしょう。 コンパイラオプションが「速度優先」の場合 4個とか2個とか1個しか8bit整数が置かれないことも あると思います。 64bit中の8bit整数へのアクセス時間はアドレスによっ て差が出ることがあるからです。 実はこのことは32ビットプロセッサでも同様です。 プロセッサ以外のハードウェアの仕様の影響が大きい からでしょうか?

0

64bitpcの1つのメモリは64bitですよね? →いいえ。一度に扱えるのが64bitというだけ、つまりそのCPUの主要なレジスタのデータ幅が64bitというだけで、メモリがどのような構成になっているのかは関係ありません。また、現在主要なコンピュータにおいてもいまだに1アドレス=8ビットというメモリ構成になっています。 64bit中の1バイト(0x61)を使うのでしょうか? →その質問は前提条件が間違っています。int型は「その処理系がもっとも扱いやすいデータ長」と規定されているので、64bitCPUを採用したマシン上の処理系ではintは「long long int」、つまり64bitになります。 蛇足ですが、32bit系ではintは「long int」、16bit系では「short int」、8bit系も「short int」になります。 a,bとふた文字の場合は… →そもそもあなたは「文字」というものをどう捉えているのでしょうか? 一般的に「文字」と呼ばれるデータの正体は「0~255」の整数です。 それぞれの記憶領域を分けずに連続配置するのならaとbという2文字は2バイト=16bitに収まりますが(終端記号を無視する場合)、それぞれの記憶領域を分けた場合、一般的には64bitの記憶領域が2セット必要になります。

0

CPUがメモリから一度に持ってこれるデータの量というのがありましてね。要はデータバスの幅です。 8ビットCPUというと、つまりそれが8ビット(1バイト)。Windows は16ビットCPUの時から存在していますが、今では64ビットCPUになってるわけです。 【64bitpcの1つのメモリは64bitですよね?】 64ビットCPUは一度に64ビットのメモリにアクセス可能です。 【文字aはint aは1バイトなので、64bit中の1バイト(0x61)を使うのでしょうか?】 C言語の場合、'a' は int 型です。 C++の場合、'a' は char 型です。 ただ、特別な場合を除き、このことは気にしなくても大丈夫です。 一応説明すると、64ビットCPUでは int 型は64ビットとしているケースと32ビットとしているケースとがあります。 いずれにしろ int 型は 1 バイトではないですよ。 『64bit中の1バイト(0x61)を使うのでしょうか?』 そういう場合もあるでしょう。でも、あまりそういう風に考えないほうが良いかもしれません。 int x = "abc"[0]; x の方は確かに64ビット(または32ビット)中の8ビット分を使ってそこに1文字の値(文字コード)をセットしています。 でも、"abc" の方は、そういう風なメモリの無駄遣いは無いわけで、「a」の文字のすぐ次に「b」の文字があります。 【a,bとふた文字の場合は64bit中の1バイト(0x61)を使い(残った7バイトは0となる)、その次の64bitメモリに64bit中の1バイト(0x62)を使うのでしょうか?】 char s[] = "ab"; この場合、s の大きさは3バイトです。 ですので「64bit中の1バイト(0x61)を使い(残った7バイトは0となる)」とはなりません。 int a[] = {'a', 'b'}; このようにすると「64bit中の1バイト(0x61)を使い(残った7バイトは0となる)」ということが実際に起きてきます。

ありがとうございます。 ちなみに、 メモリ上では単なるビット列ですが、それをバイト単位あるいは4バイト単位で処理するかは、変数や式の型によって変わります。 と言われたのですが、 ポインタによるアドレスなどのバイト数は変数や式の型に依存せず64bitpcでは、8バイト、 32bitなら4バイトと決まっているのでしょうか?

0

64bitとか32bitとかいうのは、CPUのレジスタのサイズの話で、メモリの一つ一つのセルのサイズの話ではない