2011-12-31 7 views
2

人C++でプログラミングを開始したい。私はvb6、vb.netでいくつかのプログラムを書いていますが、現在はC++で知識を得たいと思っています。私のコードをコンパイルするコンパイラは最小のウィンドウアプリケーションにコンパイルできます。例えば、PureBasicと呼ばれる基本的な言語コンパイラがあります。これは、Hello Worldのスタンドアロンアプリケーションのサイズを5 KBにし、コンパイルしたシンプルなソケットプログラムは12 KB(DLL-sとランタイムファイルなし)でした。私はそれが素晴らしいことを知っているので、私はC + +のためのこのようなものが欲しい。C++最小の実行ファイル用のWindowsコンパイラ

私が間違っていて、そのような種類のWindowsコンパイラがない場合、誰かが私にC++実行可能ファイルのサイズを減らす方法、またはWindows API呼び出しを使用する方法を教えてくれるWebサイトや書籍を教えてくれますか?

+10

C + +を学習し、exeサイズを心配します。あなたが時間をかけてコアの原則を学ばなければ、あらゆる種類の問題にぶつかります。 – Matt

+0

http://www.codeproject.com/KB/library/tlibc.aspxをご覧ください。 – dalle

+1

通常、実行可能なサイズはあまり問題になりません。また、アプリケーションにランタイムやDLLがないと言っている間、これは正確ではありません。これらのランタイムがシステムの標準であるかどうかは、さらに重要です。 – Serodis

答えて

3

私はこれを何年も前にVC6でやっていました。実行可能ファイルは、ワイヤを介してターゲットコンピュータに送信されるため、実行する必要がありました。モデム接続を介して送信される可能性が高いため、可能な限り小さくする必要がありました。実行可能ファイルを縮小するには、2つの方法があります。

  1. CまたはC++ランタイムは使用しないでください。コンパイラにそれらをリンクしないように指示します。すべてのバージョンのWindows(98、Me、NT、2000)で使用できることが保証されているWindows APIのサブセットを使用して、必要な機能をすべて実装します。
  2. すべてのコードセグメントとデータセグメントを1つにまとめるようにリンカーに指示します。私はこのスイッチを覚えておらず、特に64ビットの実行可能ファイルではまだ可能かどうかわかりません。

最終的な実行可能ファイルサイズ:〜2K

5

たとえば、Microsoft Visual C++コンパイラは、Cランタイム(/NODEFAULTLIB)へのリンクをオフにするだけで、実行可能ファイルは5KBになります。ただ1つの問題があります:標準のCおよびC++ライブラリ、例外処理、演算子、浮動小数点算術などnewdeleteのようなC++の標準機能のほとんどを使用することはできません。純粋なOSの機能(例えば、CreateFileでファイルを作成し、HeapAllocなどでメモリを割り当てるなど)を使用する必要があります。しかし、あなたはどのように使用するかについて、

+0

が公正であるためには、オペレーティングシステム関数 – Milan

+0

@ entity64を使用して独自の新しい/削除演算子を書くことができます:はい、必要なCRTの部分をゼロから実装することもできます。 – ybungalobill

0

私はあなたが言語を学ぶ前に、最適化のこの種のことに興味がある理由は分からないが、とにかく...

それはあなたが使用しているものコンパイラのあまり違いはありません。それ。 Visual Studio C++やMinGWのようなコンパイラを選択し、そのドキュメントを読んでください。コンパイルのサイズやパフォーマンスを最適化する方法についての情報があります(通常、サイズを最適化するとパフォーマンスが低下し、その逆もあります)。

たとえば、Visual Studioでは、/ O1パラメータをコンパイラ(またはプロジェクトプロパティ/ C-C++ /最適化)に渡すことによって、実行可能ファイルのサイズを最小限に抑えることができます。

また、「リリース」モードでコンパイルすることを忘れないでください。そうでないと、実行可能ファイルにデバッグシンボルがいっぱいになる可能性があります。

+0

素敵な答えをありがとう、しかし、私は、小さなグループの人が基本的な言語コンパイラを作って、少しずつexeを生成すると、C++のために何か類似しているはずだと思った、私は間違っていた – Irakli

0

Windowsを搭載した最新のデスクトップPCには、少なくとも1GbのRAMと巨大なハードドライブが搭載されているため、実際のアプリケーションを代表するものではない些細なプログラムのサイズを心配するのは無意味です。

"Hello world"プログラムのサイズは、実行環境の設定とコードの読み込みと開始を行うためのオーバーヘッドが固定されています。重要ではないアプリケーションでは、より多くの機能が追加されるにつれてコードサイズが増加する率に関心があります。そしてその意味では、どのコンパイラのC++コードもかなり効率的です。言い換えれば、PureBasicプログラムは、同等またはそれ以上のC++プログラムよりも小さくて済むかもしれませんが、コードに便利な機能を組み込むまでには必ずしもそうではありません。

@user:C++は小さなオブジェクトコードを生成しますが、printf()(またはcout < <)のコードが静的にリンクされていると、printf "hello world"プログラムでは使われていないので冗長です。例えばputs()を使ってみると、コードが小さいことがわかります。

また、リンゴとリンゴを比較していますか?実行環境の中には、C++プログラムで静的にリンクされる可能性のある機能を提供している、動的にリンクされたランタイムライブラリまたは仮想マシンに依存するものがあります。

-1

は、私が死ん投稿に返信が好きではありませんが、応答のいずれも(マット応答を除く)、これを言及していないので...

リピート私の後:C++!=(vb6 || vb.net ||基本)。そして、私は文法について言及するだけではなく、C++プログラマがVBプログラマよりよく設計されているように、C++のコーディングスタイルは通常VBのものとは異なります。

PS:いいえ、ありませんC + +の世界でコピー貼り付け。申し訳ありませんが、これを言っていた...

関連する問題