• 締切済み

Cコンパイラの仕組を教えてください

入社して一年目の未熟者なので教えてください Cのコンパイル時のオブジェクトのファイルサイズが毎回違っているのですけど(ソースは同じもの)どうしてですか? 同じになる時もあります。 環境はSolarisです。 よろしくお願いしま~す ⊂((〃'人'〃))⊃オ・ネ・ガ・イ・ウキャ♪

みんなの回答

回答No.2

ソフトウェアによっては、makeを実行するごとにコンパイル回数を カウントして、ソース中の文字列を変更しているものもあります。 その場合、文字列の共有とかの都合でサイズが変わることもあり得 るでしょう。 コンパイル途中にライブラリを作っていて、2回目以降のコンパイ ルではそのライブラリを作り直さずにモジュールの上書きだけとい う場合には、モジュールのアドレスが変わるなどして変化がある可 能性もあります。 他にも、サイズが変わる可能性としては、2回目以降で以前のコン パイル結果の何かを利用しているということでしょうね。しかし、 2回目と3回目でも変化があるのは、あまり思いつきません。 いずれにしても、原因をちゃんと調べたいなら、1回だけコンパイ ルしたディレクトリ、2回だけ、3回だけ、4回だけと別々に用意し、 diff -ru dir1 dir2 とかして、一方にしかないファイル、変化の あるファイルの有無をチェックすればいいかと思います。 単なる興味なのですが、もし調べられたら、補足ででも紹介しても らえるとありがたいです。

すると、全ての回答が全文表示されます。
  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

ソースコードが同じでもコンパイルオプションが 異なれば当然オブジェクトファイルのサイズも 変わります。 たとえば、「-O2」をつけるかどうかでもファイル サイズは変わりますし、「-g」がつけばファイル サイズが大きくなります。 また、最終的な実行ファイルもリンクするライブラリに よってファイルサイズが変わります。

marorin
質問者

補足

ご回答ありがとうございます 質問が中途半端だったので申し訳ありませんが、 コンパイルするmakefileは同じものをつかっているので、オプション等の条件は毎回同じです。 例えば続けて数回同じものをコンパイルした際、サイズが変わってしまいます。 どうしてなんですか?最適化とか関係有るのでしょうか? わかれば教えてください。(。-人-。) スイマセン サイズ例・1回目:807312バイト ・2回目:807308バイト      ・3回目:807304バイト ・4回目:807304バイト・・・・・

すると、全ての回答が全文表示されます。

関連するQ&A