こんにちは.
早速の質問なのですが,C言語におけるvoid型ポインタのサイズは何に依存して決まるのでしょうか.
Cの規格・・?コンパイラ・・?
自分はコンパイラにgccを使っています.そこで,GNU Cやgccのドキュメントを漁ってみたのですが,
void *のサイズに関する記述を見つけることはできませんでした.
自分の予想ではコンパイラが何bit環境のものか という点に依存して決まっているような気がします.
例えば32bit環境のコンパイラではsizeof(void *)は4(byte)で,64bit環境のコンパイラでは8(byte)と.
しかし裏がとれず,ここで質問させていただく運びとなりました・・
繰り返しになりますが,C言語におけるvoid型ポインタのサイズは何に依存して決まるのでしょうか.
ご回答よろしくお願いしますm(_ _)m
void型ポインタのサイズ
Re: void型ポインタのサイズ
voidへのポインター
に限った話ではなく、
すべての型への
ポインターのサイズは
CPUのビット数に
依存すると思います。
に限った話ではなく、
すべての型への
ポインターのサイズは
CPUのビット数に
依存すると思います。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: void型ポインタのサイズ
最初に言っておくとvoid*もint*もdouble*もメモリサイズは同じです。ポインタですから。
で、ポインタのサイズはターゲットなるOSとCPUに合わせるわけですので、コンパイラが32bitでも64bitOS用の実行ファイルは作ることは可能です。
強いて言うならコンパイラの実行ターゲット指定のオプションで決まるとしか言えないですね。
クロス開発と呼ばれる自分のCPUで実行できない実行ファイルの作成は当たり前に行われていますよ。
一番身近ならAndroidとかiPhoneとか。
で、ポインタのサイズはターゲットなるOSとCPUに合わせるわけですので、コンパイラが32bitでも64bitOS用の実行ファイルは作ることは可能です。
強いて言うならコンパイラの実行ターゲット指定のオプションで決まるとしか言えないですね。
クロス開発と呼ばれる自分のCPUで実行できない実行ファイルの作成は当たり前に行われていますよ。
一番身近ならAndroidとかiPhoneとか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: void型ポインタのサイズ
確かに,voidに限った話をするべきではなかったですね^^;失礼しました.
色々勘違いしていました;
お二人ともご回答ありがとうございました!
そうか・・コンパイルオプションで指定できるということは,定義うんぬんではなく都合で変えられるということか・・softya(ソフト屋) さんが書きました: 強いて言うならコンパイラの実行ターゲット指定のオプションで決まるとしか言えないですね。
クロス開発と呼ばれる自分のCPUで実行できない実行ファイルの作成は当たり前に行われていますよ。
色々勘違いしていました;
お二人ともご回答ありがとうございました!
Re: void型ポインタのサイズ
言語仕様上は、void*とint*とdouble*のサイズが同じとは限りません。
ただし、void*はchar*と同じ内部表現と境界調整を持つということになってます。
ただし、void*はchar*と同じ内部表現と境界調整を持つということになってます。