この投稿では、3 つの異なる質問を蓄積しましたが、同様のコンテキストについてです。以下同じです。
- ソースから実行可能ファイルへの一連の手順
- コンパイラの 32/64 ビット バージョン
- コンパイラに対する c データ型のサイズの依存性
Q1: ソースから実行可能ファイルへの一連の手順
ソースファイルから実行可能ファイルを生成する手順は次のとおりだと思います
- 書かれたソースファイルは、高/中レベル言語のいずれかで書かれ、コンパイラによって前処理されます。
- GCC/G++を使用する場合、gcc -save-temps -cを使用して、それぞれアセンブリ (読み取り可能) とオブジェクト コード (人間が読み取れない) である.S ファイルと .Oファイルを生成します。
- 最終段階では、このオブジェクト コードをリンクして不明なシンボルを解決し、マシン (または) 実行可能コードを作成します。
ここでの質問は、これらの仮定が正しいかどうかです。しばしば、オブジェクトとマシン コードという用語が同じ意味で使用されているのを目にします。2つの正確な違いは何ですか。
Q2: コンパイラの 32/64 ビット バージョン
Q1 の上記の手順のどこに、コンパイラの種類が影響しますか。変更されるのは、生成されたアセンブリ コードですか?
Q3: c データ型のサイズのコンパイラ依存性
C プログラミングに関しては、コンパイラの種類 (または) ハードウェアの種類に依存するデータ型のサイズです。これらの要因の依存性について詳しく説明してください。スタック オーバーフローで Q3 との議論がいくつか見られますが、これについてはまだ困惑しています。