:
我々は最近、小規模な組み込みのようなターゲットのための数学ライブラリを書いて、プロジェクトの途中についてC.でそれを書き始めた、我々はいくつかを切り替えます多くのほぼ同じコードを書く(あるいは、プリプロセッサマクロに40行の関数を埋め込む)いくつかの関数のテンプレートを使うために、C++にファイルを書き込むことができます。
切り替えを開始した時点で、いくつかの関数で生成されたアセンブリコード(GCCを使用)を非常に注意深く見て、ファイルがコンパイルされたかどうかは本質的に同じであることを確認しましたCまたはC++ - 「本質的に同一」とは、アセンブリファイルの最初と最後にシンボル名やものなどの違いがあったことを意味します。機能の真ん中の実際の命令はまったく同じでした。
申し訳ありませんが、私はより確かな答えを持っていません。追加する
編集、2013年3月24日:最近、私はラスティ・ラッセルは、Cコンパイラでコンパイルし、GCCをコンパイルするには、最近のスイッチに対応して、C++コンパイラでコンパイルGCCのパフォーマンスを比較した記事に出くわしましたC++の場合:http://rusty.ozlabs.org/?p=330。結論は興味深い:C++コンパイラでコンパイルされたバージョンは非常にわずかに遅かった。その差は約0.3%であった。しかし、これは大規模なデバッグ情報によって引き起こされるロード時間の差によって完全に説明されました。彼がバイナリを取り除いてデバッグ情報を取り除いたとき、その差は0.1%未満、すなわち測定ノイズと本質的に区別できませんでした。
異なるコンパイラを比較しますか?同じコンパイラによるCコンパイルとC++コンパイルの比較(違いがありますか?)そして、 "組み込みスタイル"のフラグは何ですか? –
同じコンパイラスイート(gccとg ++)仕様の相違のために、有用な最適化は、ある言語の仲介表現と他の言語の仲介表現で多かれ少なかれ適用されるかもしれません。例外サポートを無効にするフラグと、RTTIを無効にするフラグの2つの組み込みスタイルフラグについて述べました。 – cdleary
Cのようなコードをコンパイルすると、どちらのフラグもどのように適用されるのかわかりません.PODしかない場合はどこにもデストラクタがないため、例外処理コードは必要ありません。仮想関数はないので、コンパイル時に解決される 'typeid'呼び出しを除いて、RTTIは必要ありません。もしそれらの関数がなければ、何も必要ありません。 –