ページ 11

void型ポインタのサイズ

Posted: 2014年9月11日(木) 21:58
by 顔芸
こんにちは.

早速の質問なのですが,C言語におけるvoid型ポインタのサイズは何に依存して決まるのでしょうか.
Cの規格・・?コンパイラ・・?

自分はコンパイラにgccを使っています.そこで,GNU Cやgccのドキュメントを漁ってみたのですが,
void *のサイズに関する記述を見つけることはできませんでした.

自分の予想ではコンパイラが何bit環境のものか という点に依存して決まっているような気がします.
例えば32bit環境のコンパイラではsizeof(void *)は4(byte)で,64bit環境のコンパイラでは8(byte)と.
しかし裏がとれず,ここで質問させていただく運びとなりました・・

繰り返しになりますが,C言語におけるvoid型ポインタのサイズは何に依存して決まるのでしょうか.
ご回答よろしくお願いしますm(_ _)m

Re: void型ポインタのサイズ

Posted: 2014年9月11日(木) 22:07
by 初級者
voidへのポインター
に限った話ではなく、
すべての型への
ポインターのサイズは
CPUのビット数に
依存すると思います。

Re: void型ポインタのサイズ

Posted: 2014年9月11日(木) 22:08
by softya(ソフト屋)
最初に言っておくとvoid*もint*もdouble*もメモリサイズは同じです。ポインタですから。
で、ポインタのサイズはターゲットなるOSとCPUに合わせるわけですので、コンパイラが32bitでも64bitOS用の実行ファイルは作ることは可能です。
強いて言うならコンパイラの実行ターゲット指定のオプションで決まるとしか言えないですね。
クロス開発と呼ばれる自分のCPUで実行できない実行ファイルの作成は当たり前に行われていますよ。
一番身近ならAndroidとかiPhoneとか。

Re: void型ポインタのサイズ

Posted: 2014年9月11日(木) 22:21
by 顔芸
確かに,voidに限った話をするべきではなかったですね^^;失礼しました.
softya(ソフト屋) さんが書きました: 強いて言うならコンパイラの実行ターゲット指定のオプションで決まるとしか言えないですね。
クロス開発と呼ばれる自分のCPUで実行できない実行ファイルの作成は当たり前に行われていますよ。
そうか・・コンパイルオプションで指定できるということは,定義うんぬんではなく都合で変えられるということか・・
色々勘違いしていました;

お二人ともご回答ありがとうございました!

Re: void型ポインタのサイズ

Posted: 2014年9月12日(金) 00:33
by ISLe()
言語仕様上は、void*とint*とdouble*のサイズが同じとは限りません。
ただし、void*はchar*と同じ内部表現と境界調整を持つということになってます。