No.7
- 回答日時:
> 結局コンパイラで何ビットにするかを決めてるのはOSやCPUを上手く動作させるためですよね。
そういうことではありません。intが32bitでも64bitでも、64bitCPUも64bitOSも上手く動くので、どっちでも良いのです。
むしろ重要なのは過去からの互換性です。
Windowsは、CPUもOSも、16bit→32bit→64bitと推移してきたのはご存じだと思いますが、Cのintは(ごく初期の記憶は無いですが)ずっと32bitなので、それに依存したプログラムがほとんどです。今、「CPUもOSも64bitなので、来年からMSのCはintを64にする。intが32のコンパイラは廃止してサポートしない」とかMSが言っちゃうと皆さん大変です。プログラム全部書き直しの検討。個人開発のフリーソフトだとそれをきっかけに公開中止・サポート中止になるかも。まあ、MS以外のCは32bitのままでしょうからそっちに切り替える選択肢もありますが。「そんなことになって、誰がどう嬉しいの?」ということで当面そういう事態にはならないでしょうね。
「int 32bitが未来永劫続くだろう」とまでは言い切れませんが。
intが何ビットかと全く関係ない別の概念として、EXEファイルには「32bitアプリ」「64bitアプリ」の区別があります。これはCのソースがどうなっているかとは関係なくて、EXEの形式というかプログラムでアクセスできる論理メモリのアドレス幅のことです。そもそもCやC++で書かれたプログラムとも限らないし。
64bitWindowsがメジャーになってからも数年はOfficeとかメジャーなウェブブラウザは32bitアプリが主流でした。これはどちらもアドインを追加して使うアプリのため、アドインがすべて64bitアプリ対応しないと、本体のみ64bitアプリをインストールすると32bitアプリのみのアドインがインストールできないからです。最近は大丈夫になったようでこれらも64bit版を使うのが普通です。
こういうのに比べると、intが32か64かとかはプログラム中の書き方だけに閉じたことで、どうでも良いことです。最近はint32_tやint64_t、int16_tのようにビット数指定の型もあるので、必要ならそういうのを使えば問題なし。intが32のコンパイラでもintを使わず全部int64_tを使えば(ライブラリ関数の引数や返値の型を除けば)intが64のコンパイラのEXEと同じです。
No.6
- 回答日時:
「intが何バイトか」は、CPUが何ビットかとか、OSが何ビットかとは何の関係もありません。
コンパイラだけで決まります。8bitCPU(メモリアドレスは16bit) 8bitOS時代のCではintは2バイトと4バイトのコンパイラがそれぞれありました。OSやCPU関係なく、プログラムでどうとでもなる話です。(プログラムサイズや実行速度にはもちろん影響あり)
コンパイラによって、
・同じOSでしか動かないコードしか生成できない物
・同じ種類のOSでビット数だけ異なるOSでも動くコードも生成できる物
・Windowsでコンパイルするが、Linux専用のコードを生成できる物
などいろいろあるので、目的のOSで動くコードが生成できるかどうかはコンパイラのドキュメントを見るしか無いです。
他人に聞くなら、それぞれのOSの種類・バージョン、コンパイラ名とバージョンを書くと、特殊なOSやコンパイラでなければ、そのコンパイラに詳しい人がいれば回答くれるかもしれません。
いまどき16bitというと組み込み系OSですかね。私は組み込み系は知りませんが。
No.5
- 回答日時:
コンパイラは「実行ファイルとして実行できるファイルを生成する」ものです。
コンパイラを実行しているCPU,OSは関係無く、どんな環境をターゲットにして実行ファイルを生成させたかに依存します。
実際にクロス開発と言って、コンパイル環境と実行環境が違う運用がされています。
(組込み用8bitCPU向けプログラムをWindowsで作成する、等)
> CPUが16bitでも32bitOSでコンパイルしたコード(例えばintが4バイトと定義されている)も問題なく動作するのですか?
どのCPU/OSでコンパイルしたかではなく、どのCPU/OSで動くことを目的にコンパイルしたか、によります。
> int型のサイズはCPUではなく、OSとコンパイラによって決まります
OSも関係ありません。
コンパイラとコンパイル時の設定で決まります。
実際は
・多くはクロス開発ではなく自環境向けの開発になる
・int等のサイズは仕様書には最小サイズだけで具体的な指定はなく、各コンパイラ製作者で「CPUが自然に扱えるサイズ」として決めている。
(それではサイズが環境によりバラバラになって困るので、後続の言語(Java等)ではint=32ビットと決めているものが多い)
・長い間32bitCPUが主流の時代が続いた
という状況にあります。
これらから
・intのサイズは(自環境である32bitCPU/OS向けに最適な)32bit
・(クロス開発などしたことが無いので) intのサイズを決めるのは(自環境である)CPUとOS
と誤解している方がいます。
関係しているのはコンパイラ(とライブラリ)だけです。
※ 実際にはコンパイラの動作環境とかライブラリの入手方法とかも関係しますが
ちなみに。
例えば intが4バイトと定義されているとしても、32bitCPU向けではレジスタとCPU命令で計算、8bitCPU向けには4バイトのメモリと32bit演算ライブラリを使って計算、とすれば、同じソースから異なるCPU向けに作ることができます。
No.4
- 回答日時:
No.3です。
要するに、16bitCPUで32bit intは現実的でないが、32bitCPUで16bit intや、64bitCPUで32bit int/16bit intは実際にある。
・32bitCPUで16bit int
Windows3.1のころは当たり前だった。
・64bitCPUで32bit int
Visuual StudioのC++とかでは今でもこれが標準のハズ。
・64bitCPUで16bit int
Windowsが32bit版で、昔の16bitコンパイラを使った場合にできる。
No.3
- 回答日時:
まず世の中にはクロスコンパイラというものがあって、コンパイラが動作する環境とコンパイルしてできた実行コードが動作する環境は必ずしも一致しないので、間違いがないように。
一般的に32bitCPU/OSで動かすようにコンパイルされた実行コードを16bitCPUで動かすことはできません。まあ高度なエミュレーターを作ってしまえば不可能ではないですけど。
ていうか32bitCPU/OS用の実行コードがそのまま動くCPUは16bitCPUではありません。特にC言語のint型はCPUが素直に計算できるビット幅の整数型なので、32bit intが使えるなら普通は32bitCPUですね。CPUのビット数は多分にマーケティング的な要素があるので16bitCPUと呼称する製品もあったかと思いますけど。
> int型のサイズはCPUではなく、OSとコンパイラによって決まります
これはIntel x86アーキテクチャの64bitCPUで顕著なものですね。今販売されている製品は64bitCPUですが、これらの製品は下位互換のために32/16bitCPUを動作モードとして含んでいます。それでOSとコンパイラによってintサイズは16/32/64bitに変わります。
古い16bitモード用のコードを生成するとintは16bitです。Windowsでは64bitOSでも基本intは32bitですが、Linuxだと64bit intのものがあります。
誤解を招く表現ということですか?
要するに最近のCPUはOSが決めたbitをひとかたまりとして使えるというわけで、そのことをOSとコンパイラが決めると表現されているのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
高校生はアルバイトするべきだろうか?賛成だったら「賛」、否定だったら「否」を文頭においてあなたの意見を教えてください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
10進数からN進数に変換するプログラミング(C言語)
C言語・C++・C#
-
プログラム言語について c言語もコードによって機械語に通訳されると知りました。直接機械が通訳しなくて
C言語・C++・C#
-
これなにがちがうんですか??
C言語・C++・C#
-
-
4
プログラマーです。このDB設計だと絶対後々面倒なことになるぞ...! って思った時ってどうしたらいい
C言語・C++・C#
-
5
プログラミングの課題がわからないので教えていただきたいです。特にサークル関数を定義した後に呼び出す方
C言語・C++・C#
-
6
0 == False はいいけど
C言語・C++・C#
-
7
c言語のリダイレクトによる円の描画について
C言語・C++・C#
-
8
c言語
C言語・C++・C#
-
9
どうして+3
C言語・C++・C#
-
10
今ってプログラミング言語は何が中心?
C言語・C++・C#
-
11
double型が正常に認識されていない恐れ
C言語・C++・C#
-
12
C言語をコンパイルするとコンピュータ上でどう動くかというコードになるみたいな説明をよく聞くのですがこ
C言語・C++・C#
-
13
mallocについて
C言語・C++・C#
-
14
だれがとけるの?
C言語・C++・C#
-
15
Python、プログラミングについて質問です
C言語・C++・C#
-
16
逆コンパイルと逆アセンブルの違いはなんですか
C言語・C++・C#
-
17
プログラミング言語についてc++に空白あると同じ文字を再度繰り返して処理しないといけないので2倍動作
C言語・C++・C#
-
18
C言語の関数と配列に関する質問
C言語・C++・C#
-
19
gccを行ってもexeファイルが生成されない
C言語・C++・C#
-
20
これて逆じゃないですか?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の環境設定
-
不要なインクルードファイルの検出
-
io.hをincludeしたプログラムで...
-
io.hをincludeするとそのような...
-
変数(関数)名の頭に_
-
0除算して、落ちるプログラムと...
-
COBOLのWin/Vistaで動くフリー...
-
C++でアボート(Abort)で処理が...
-
graph.hがincludeできない
-
__extension__
-
何も書いて無いのに警告が出る...
-
指定した範囲での警告をなくす...
-
PICでLEDの点滅について
-
isnanの取り扱いについて
-
秀丸エディタでのC言語環境(ハ...
-
コンパイルできない
-
PICマイコンによる乱数の表示に...
-
Cのコンパイラの変数名の処理の...
-
CPUが16bitでも32bitOSでコンパ...
-
ABAQUS ユーザーサブルーチン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
io.hをincludeするとそのような...
-
C++ で、「)」が必要 というエ...
-
C++でアボート(Abort)で処理が...
-
Visual C++とVisual C++.NETの違い
-
変数(関数)名の頭に_
-
fortranでのNaNについて
-
コンパイルできない
-
C++の Unhandled Exceptionにつ...
-
コンパイラの制限 : ヒープの領...
-
PICマイコンによる乱数の表示に...
-
CPUが16bitでも32bitOSでコンパ...
-
関数の戻り値による変数の初期化
-
Delphiの逆コンパイル
-
どのプログラミング言語ででき...
-
コンパイラフラグ(compiler fla...
-
コンパイラについて
-
FORTRAN→Cに翻訳
-
Eclipseの環境設定について
-
バイナリファイルとソースコー...
おすすめ情報