5と6で、コンパイル後のサイズに違いありますか?

解決


ショコラ  2002-02-11 07:15:22  No: 546  IP: [192.*.*.*]

こんばんは、ショコラです。

ほとんど同じソースをコンパイルしたとき、
(「ほとんど同じ」とは、コンポーネントが一個追加されてたりする違いを指しています)
Delphi5と6とで、できた実行ファイルのサイズが大きく違うということはありますか?
(というのも、どうもそんな雰囲気なのです。倍近く違っているような…)

編集    削除
にしの  2002-02-11 11:27:05  No: 547  IP: [192.*.*.*]

コンポーネントによりますが、同じコンパイラでもコンポーネント1つ加わるだけで実行ファイルの大きさは変わりますよ。

編集    削除
ショコラ  2002-02-11 14:27:40  No: 548  IP: [192.*.*.*]

ども、にしのさん。こんばんは、ショコラです。

> コンポーネントによりますが、同じコンパイラでもコンポーネント1つ加わるだけで
> 実行ファイルの大きさは変わりますよ。

訊き方が悪かったですね。カッコ内に、コンポーネントのことを記したのは余計でした。
全く同じソースをコンパイルしたときに…と訊くべきでした。
(コンポーネントを追加すれば、少しなりと、サイズが増えるのは分かります)

ただ、残念ながら、全く同じソース(5を使ったときのソース)がもはや無く、
先のような抽象的な訊き方しかできなかったのです。ごめんなさい。

コンポーネントは、デフォルトでDelphiに存在する「タイマー」なんですが、
基本的なコードは(原則として)そのままに、その「タイマー」を一個追加した形
(そもそも「タイマー」が一個あり、ソレにもう一個追加した形。もちろん、
その「タイマー」のon/offのための、チェックボックスも追加されています)で、
コンパイルした実行ファイルのサイズが、約300KB→600KB、倍近く大きくなったので、
ちょっと心配になったのでした。

もし、バージョンによる、そういう違いが出ているのなら、
やっぱDelphi6をやめて、5を探して、やり直したほうがいいかな、って…。

結局、実行ファイルCompressとかで、逃げようと思います。お手数かけました。

編集    削除
にしの  2002-02-12 06:46:22  No: 549  IP: [192.*.*.*]

Delphiの実行ファイルって、大きいですよね。
Delphi6を持っていないので、Delphi5との大きさを比べることはできませんが、最適化オプションのデフォルト値が変わったりしたのかもしれませんね。
あと、Delphi5とDelphi6で、最終的にプロジェクトに含まれるユニットの数が変わっていると思います。これによって、必要のない部分が増えているのかもしれません。

upxなどで、実行ファイルを圧縮するとかなり小さくなります。
Delphian World
http://home1.infonia.ne.jp/~delphian/delphi/
の、Applicationのところに
「実行プログラムを驚異的に圧縮します」
というものがあります。
upxはCUIですが、それをGUIで操作するようにするためのものらしいです。

編集    削除
ショコラ  2002-02-13 08:00:14  No: 550  IP: [192.*.*.*]

ども、にしのさん。こんばんは。ショコラです。

> あと、Delphi5とDelphi6で、最終的にプロジェクトに含まれるユニットの数が変わっている
> と思います。これによって、必要のない部分が増えているのかもしれません。

だとしたら、困りものですね。
バージョンアップで、サイズが大きくなるのは、ソフトの常なんでしょうけど。
(ただ、この場合は、意味が少し違う…)

> upxなどで、実行ファイルを圧縮するとかなり小さくなります。

UPXは、ver.1.20を持っています(^^ゞ
でも、ViXの作者の方が最新バージョンで、
「XPのビジュアルスタイルに対応できなくなるようなので、UPXによる圧縮をやめた」
と言われていて、気になるところです。
個人(または身内)で使うアプリじゃなく、配布する物の場合、
こういう可能性があるとなると、使用をためらってしまいます。

編集    削除
にしの  2002-02-13 08:42:28  No: 551  IP: [192.*.*.*]

XPスタイルに対応していないんですか?
全コンポーネントのLook&Feelを変更するコンポーネントがあればいいんですけどね。
いつも作ろうと考えて、ボタンの処理をするところで終わります(笑)
ボタンまでは簡単なんですが、汎用的に(Formに貼り付けるだけで)使えるコンポーネントにするにはまだ遠いです。
http://www.torry.net/ に、スキン対応コンポーネントがあるんですが、シェアウェアのようですし。

編集    削除
ショコラ  2002-02-18 12:07:47  No: 552  IP: [192.*.*.*]

ども、にしのさん。こんばんは、ショコラです。

Delphi6に、UpdatePackをあててみましたら、
コンパイル後の実行ファイルのサイズが(あててないときに比べて)90%になりました!

この事実から考えて、製品のバージョンが異なると、
コンパイル後の実行ファイルのサイズ、違う方がふつうだと言えますね。

ってことは、同じ製品でも、ラインナップが異なれば…ですよね。
(じゃなきゃ、あの価格差は納得できない?)

編集    削除
にしの  2002-02-18 19:06:21  No: 553  IP: [192.*.*.*]

> この事実から考えて、製品のバージョンが異なると、
> コンパイル後の実行ファイルのサイズ、違う方がふつうだと言えますね。

テストしたコードがどのようなものかわからないですが、通常は、
バージョンが違う=(ライブラリが違う または コンパイラが違う)
だと思います。
コンパイラに異常がなければ、ライブラリだけが更新されるでしょうし、ライブラリが更新されれば、ライブラリのサイズも変わると思います。
更新されたライブラリが、作成したプログラムに含まれているのなら、コンパイラが違わなくてもサイズは変わります。
Delphi6のアップデート情報を見る限りでは、ライブラリの更新だと思います。

たとえば、新規作成でコンソールアプリケーションを選び、次のようなプログラム(これはハノイの塔ですが)

program TestDelphi;
{$APPTYPE CONSOLE}
const NumberOfDisks = 5;  (* 円盤の枚数 *)
      Source        = 1;  (* 最初の柱番号 *)
      Destination   = 3;  (* 目的の柱番号 *)
procedure Move(N, A, B: integer);
begin
  if N > 1 then Move(N - 1, A, 6 - A - B);
  writeln('円盤 ', N:1, ' を ', A:1, ' から ', B:1, ' に移す');
  if N > 1 then Move(N - 1, 6 - A - B, B)
end;
begin
  Move(NumberOfDisks, Source, Destination)
end.

を保存、コンパイルしたところ、16896バイトでした。
# Delphi5Pro、多分アップデート無しです。アップデートはダウンロードにあと1時間くらい掛かりそうです。

単純に、write('test')だけで作ると、16484($4000)バイトなので、それ以上になるようなプログラム、もう少し複雑で、かつ、ライブラリに依存しないプログラムでテストしてみてください。
# アップデートしたあとだと面倒ですね。手間でなければ、ですが。

ちなみに、Dev-Pascal(Version1.9)で試したところ、サイズは14848バイトでした。write('test')だけで作ると同じ14848バイトだったので、参考にはなりませんが・・・。
# Dev-Pascalが使用するコンパイラは、cygwinのppc386だと思います

Delphiの価格差は、コンポーネントやDB,Web関連によるものだと思います。

編集    削除
ショコラ  2002-02-19 04:47:39  No: 554  IP: [192.*.*.*]

ども、にしのさん。こんばんは、ショコラです。
お手数かけてすみません>私がこだわりすぎですかね(^^;;

上に書いてあることって、
「新規作成から、コンソールアプリケーションを選んで、表示されたエディタ内を、
program TestDelphi; 〜 end. で書き換えて、Ctrl+F9し、
生成された実行ファイルのサイズを調べる…」
って、ことだと考えていいでしょうか?

編集    削除
にしの  2002-02-19 07:32:05  No: 555  IP: [192.*.*.*]

はい。
上のソースを、コンパイル(または再構築)して、生成された実行ファイルを、コマンドプロンプト上のdirで確認した値です。

でも少し例が悪かったですね。
こんな簡単なプログラムじゃ、最適化しようが無いかも・・・。

ちなみに、Delphi5Pro(Update前後)とも、同じサイズでした。

編集    削除
ショコラ  2002-02-19 15:38:54  No: 556  IP: [192.*.*.*]

ども、にしのさん。おはようございます、ショコラです。

上に書いてあったの、そのとおりにやって、
できた実行ファイルのプロパティを調べたら、9728バイトでした。
(実行すると、DOS画面が瞬間出て消えました。「1を2に移す…」ってのが見えた)

???何か、私。大きな間違い、してるのかも…(^^;;

編集    削除
にしの  2002-02-19 19:06:36  No: 557  IP: [192.*.*.*]

いや、あってると思いますよ。
僕のところのオプション設定が悪いんでしょう。
デバッグ情報も付加してますし。

それでも、9KBまでは減りませんでした。
5と6を比べると、やはり最適化されているということですか。

編集    削除
Hiro  2002-02-22 01:12:15  No: 558  IP: [192.*.*.*]

参考までに私の作った
アーカイブユーティリティ(Lhasa風)で調べてみました
Delphi5      373KB  382,464B
Delphi6      509KB  521,216B
Delphi6 up1  450KB  460,800B

編集    削除
ショコラ  2002-02-23 09:46:56  No: 559  IP: [192.*.*.*]

ども、Hiroさん。こんばんは、ショコラです。

> 参考までに私の作った
> アーカイブユーティリティ(Lhasa風)で調べてみました

やっぱり、ですね。思ったとおり!
6(特にUp前)は、5に比べて、かなり大きくなるんですね。

にしのさんが言ってらしたように、同じ趣旨のコンポーネントでも、
5→6で、サイズが変わった(大きくなった)ってことですよね。

ただ、上記の、にしのさんの「ハノイの塔」の実験から、
ライブラリに依存しなければ、小さくなるのに…>もったいない(^^;;

編集    削除