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

A 回答 (2件)

ソフトウェアによっては、makeを実行するごとにコンパイル回数を


カウントして、ソース中の文字列を変更しているものもあります。
その場合、文字列の共有とかの都合でサイズが変わることもあり得
るでしょう。

コンパイル途中にライブラリを作っていて、2回目以降のコンパイ
ルではそのライブラリを作り直さずにモジュールの上書きだけとい
う場合には、モジュールのアドレスが変わるなどして変化がある可
能性もあります。

他にも、サイズが変わる可能性としては、2回目以降で以前のコン
パイル結果の何かを利用しているということでしょうね。しかし、
2回目と3回目でも変化があるのは、あまり思いつきません。

いずれにしても、原因をちゃんと調べたいなら、1回だけコンパイ
ルしたディレクトリ、2回だけ、3回だけ、4回だけと別々に用意し、
diff -ru dir1 dir2 とかして、一方にしかないファイル、変化の
あるファイルの有無をチェックすればいいかと思います。

単なる興味なのですが、もし調べられたら、補足ででも紹介しても
らえるとありがたいです。
    • good
    • 0

ソースコードが同じでもコンパイルオプションが


異なれば当然オブジェクトファイルのサイズも
変わります。
たとえば、「-O2」をつけるかどうかでもファイル
サイズは変わりますし、「-g」がつけばファイル
サイズが大きくなります。

また、最終的な実行ファイルもリンクするライブラリに
よってファイルサイズが変わります。

この回答への補足

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

補足日時:2001/06/26 12:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング