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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 配列と関数の練習問題 6 2024/04/08 16:50
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# 変数のスコープ 5 2023/05/27 17:50
- C言語・C++・C# C言語をコンパイルするとコンピュータ上でどう動くかというコードになるみたいな説明をよく聞くのですがこ 6 2024/04/18 00:09
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- WordPress(ワードプレス) wordpressでphpを読み込みたい 1 2022/10/30 23:40
- C言語・C++・C# C言語です 2 2023/10/16 01:43
- Excel(エクセル) vba コンパイル 4 2022/10/27 10:01
- CPU・メモリ・マザーボード CPUで動作しているOSについての質問です。 3 2023/05/05 00:10
- C言語・C++・C# C言語について 6 2023/11/29 14:02
このQ&Aを見た人はこんなQ&Aも見ています
-
とっておきの「夜食」教えて下さい
真夜中に小腹がすいたときにこっそり作るメニュー、こっそり家を抜け出して食べに行くお店… 人には言えない、けど自慢したい、そんなあなたの「とっておきの夜食」を教えて下さい。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
2024年のうちにやっておきたいこと、ここで宣言しませんか?
2024年も残すところ50日を切りましたね。 ことしはどんな1年でしたか? 2024年のうちにやっておきたいこと、 よかったらここで宣言していってください!
-
うちのカレーにはこれが入ってる!って食材ありますか?
カレーって同じルーから作っても、家庭によって入っているものや味が微妙に違っていて面白いですよね! 「我が家のカレーにはこれが入ってるよ!」 という食材や調味料はありますか?
-
10進数からN進数に変換するプログラミング(C言語)
C言語・C++・C#
-
プログラム言語について c言語もコードによって機械語に通訳されると知りました。直接機械が通訳しなくて
C言語・C++・C#
-
0 == False はいいけど
C言語・C++・C#
-
-
4
プログラマーです。このDB設計だと絶対後々面倒なことになるぞ...! って思った時ってどうしたらいい
C言語・C++・C#
-
5
c言語のリダイレクトによる円の描画について
C言語・C++・C#
-
6
プログラミングの課題がわからないので教えていただきたいです。特にサークル関数を定義した後に呼び出す方
C言語・C++・C#
-
7
プログラミング言語についてc++に空白あると同じ文字を再度繰り返して処理しないといけないので2倍動作
C言語・C++・C#
-
8
今ってプログラミング言語は何が中心?
C言語・C++・C#
-
9
どうして+3
C言語・C++・C#
-
10
C言語をコンパイルするとコンピュータ上でどう動くかというコードになるみたいな説明をよく聞くのですがこ
C言語・C++・C#
-
11
c言語
C言語・C++・C#
-
12
C言語について。
C言語・C++・C#
-
13
逆コンパイルと逆アセンブルの違いはなんですか
C言語・C++・C#
-
14
Cのプログラムからアクセスできないファイル名の一括変更方法
C言語・C++・C#
-
15
mallocについて
C言語・C++・C#
-
16
Python、プログラミングについて質問です
C言語・C++・C#
-
17
だれがとけるの?
C言語・C++・C#
-
18
これて逆じゃないですか?
C言語・C++・C#
-
19
c++の勉強方法を教えてくださいプログラミングをやった事がなく1から勉強を始めようと思います1日1時
C言語・C++・C#
-
20
プログラミングでArduinoのc++かc#を言葉から自動でソースコードを作ってくれる優秀なものはあ
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/6】 西暦2100年、小学生のなりたい職業ランキング
- ・ちょっと先の未来クイズ第5問
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
初心者はIDE使わないほうが良く...
-
visual studio 2005でC言語は学...
-
変数(関数)名の頭に_
-
C++ で、「)」が必要 というエ...
-
Bluestacks内でダウンロードし...
-
あるプログラムのコマンドライ...
-
EXCELなどで「返す」という表現
-
65536は2の何乗なのでしょうか?
-
数値計算の高速化 (cos, sin, exp)
-
アルゴリズムとプロトコールの違い
-
入射角反射角
-
Visual C++で走行時に動かなく...
-
c言語 三角形
-
PICマイコンのコピー(クローン...
-
fortran errorについて
-
バッチファイルでウインドウを...
-
バッチ、vbs等でのソフトウェア...
-
シードを考慮したトーナメント...
-
フリーのCOBOL作成?ソフト
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
C++ で、「)」が必要 というエ...
-
C++でアボート(Abort)で処理が...
-
コンパイルできない
-
コンパイラについて
-
C言語のワーニングメッセージの...
-
Visual C++とVisual C++.NETの違い
-
Eclipseの環境設定について
-
io.hをincludeするとそのような...
-
不要なインクルードファイルの検出
-
PICマイコンによる乱数の表示に...
-
__extension__
-
C言語
-
graph.hがincludeできない
-
fortranでのNaNについて
-
ABAQUS ユーザーサブルーチン...
-
変数(関数)名の頭に_
-
関数の戻り値による変数の初期化
-
CPUが16bitでも32bitOSでコンパ...
-
Delphiの逆コンパイル
おすすめ情報