
sizeof演算子を使ってchar int float double型のバイト数を調べると、char 型については1バイトと決まっていて、int float doubleについては2から8バイト(処理系によって違う)なのは理解できます。しかし、char* int* float* double*型(ポインタ型)のバイト数は2から4バイトになるのが多いとおもいますが、どういう理由でポインタ型のバイト数が決まるのか、その理由をお教え願いたく思います。16ビットcpuあるいは32ビットcpuと言うハードの影響なのかそれとも何かソフトによるのか、その理由を知りたいと思います。なお私の処理系ではポインタは全て4バイトになっています。特に不思議に思うのはchar型は1バイトなのに、char*型が4バイトになっていることです。
宜しく願います。
No.3ベストアンサー
- 回答日時:
例えば
char a = 1;
の場合メモリの特定のアドレスに1という値が保存されます。
アドレスを0x20000000番地とすると
0x20000000 : 01
という具合です。
この場合アドレスは4バイトなのでsizeof(char*)は4になります。
アドレスのサイズはCPUにより決まると考えていいと思います。
スモールモデル(アドレス2バイト)やラージモデル(アドレス4バイト)を切り替えられるCPUもありました。

No.5
- 回答日時:
こんにちは
>私の処理系ではポインタは全て4バイト
あなたのパソコンはCPUが32ビットだとわかりました。
つまり、32ビットなので約42億個(2の32乗)のメモリがあつかえます。
約42億個のメモリの一つ一つを4バイトのアドレスで管理しているのです。
ではdoubleはアドレスが8個になってしまうではないか?
とまたまた疑問に思われるでしょう。
メモリの管理については
「はじめて読む Pentium マシン語入門編」アスキー出版
http://www.ascii.co.jp/books/books/detail/4-7561 …
を読まれるとよくわかります。
「アセンブラ入門 CASLII」 SCC出版局
http://www.scc-kk.co.jp/scc-books/book_data/6074 …
を読めばワード、バイトというメモリの確保の仕方もわかります。
この2冊を勉強してください。
これを読んでおけば、これから必ず出てくる構造体のアライメントの疑問も解決できます。
http://www5d.biglobe.ne.jp/~noocyte/Programming/ …
No.2
- 回答日時:
ポインタには、メモリ上のアドレスが入っています。
そして、データ本体はそのアドレスのところに格納されます。
ポインタに入っているのは、データ型に関らずデータの入っているアドレスですので、全て同じサイズになります。
32ビットのOSですと、アドレスは4バイトで表されますので、全てのポインタ型のサイズは4バイトになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
日付時刻を4バイトに
-
VB.NET LeftBの代用
-
文字コードの利点・欠点について
-
「1TB」のHDDに日本語は何字入...
-
VBSでテキストファイルの文字列...
-
ホームページビルダーで行間を...
-
PINVOKEで構造体配列をマーシャ...
-
Excel 1セル当りの文字数が2...
-
DataGridViewの特定列に入力さ...
-
Excel VBA メール作成について ...
-
stable diffusionのエラー
-
CGIを勉強しています。¥n(改...
-
【Excel VBA】10進数を2進数に...
-
micropythonコード 修正
-
エラー「書き込み中にアクセス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
-
COBOLのCOMP形式について
-
バイト列とバイナリ列の違いが...
-
エクセルシート名の制限を変更...
-
ピクセル,dpiから容量(バイト...
-
ビットスワップとバイトスワッ...
-
テキストBOXの入力制限について
-
機種依存文字をチェックしたい。
-
「1TB」のHDDに日本語は何字入...
-
C++ Builderで文字列をバイトに...
-
全角半角を調べるライブラリ関...
-
SQLで1バイト、2バイト混在...
-
VB6とSQL Serverの桁の扱い方に...
-
jis x 0208 について
-
VBAでShift-JISのURLエンコード
-
この関数はどのプログラミング...
-
COBOL PICTUREで X,S,Vの意味
-
半角、全角の判別方法
おすすめ情報