私が YouTube でデモシーンのビデオを見ると、作成者はファイルサイズが 64kb 以下で、わずか 4kb のものもあるとよく自慢します。非常に基本的なプログラムを C++ でコンパイルすると、実行可能ファイルは常に少なくとも 90kb 程度になります。これらのデモはすべてアセンブリで書かれていますか? 私の理解では、デモ作成者も c/c++ を使用していました。
5 に答える
これらのデモは、標準ライブラリ (C++ ではなく、C 標準ライブラリでさえも) を使用せず、標準ライブラリとリンクしていません (インポート テーブル サイズを回避するため)。それらは、絶対に必要な最小限のものだけを動的にリンクします。
デモの「メイン関数」は、通常、エントリ ポイントと同じです (エントリ ポイントが、OS 固有のセットアップを実行し、グローバルを初期化し、コンストラクタを実行し、最終的に を呼び出す CRT init 関数である通常のプログラムとは異なりますmain
)。
通常、デモの実行可能ファイルは、実行可能形式の仕様 (最小セクション サイズとアラインメントを省略) に準拠しておらず、exe-packer で圧縮されています。技術的には、これらは「壊れた」プログラムですが、正常に実行されるほど「壊れた」だけです。
また、そのようなデモは、手続き的に生成されたコンテンツに大きく依存しています。
50レップポイントを持っていないのでまだコメントできませんので、お答えします。
より小さなプログラムを作成する 1 つの方法は、Microsoft Visual C/C++ 4.0 などの古いコンパイラを使用することです。これは、Microsoft Visual Studio 2005 よりも小さな .exe ファイルを生成します。
実際には環境に依存しますが、テンプレートをインスタンス化せず、すべてを動的にリンクする場合、実際に実行するコードは実行可能ファイルに含まれないため、実行可能ファイルのサイズを非常に簡単に小さくすることができます。