2016-05-12 6 views
0

emplaceは実行時にメリットがありますが、this answerはコンパイルのスピードアップも可能です。 This fellowに同意します。ベクトルはpush_backよりも速くコンパイルされますか?

なぜですか?

+0

誰かが 'push_back'と' emplace'のコンパイル速度の見積もりを教えることができます。 – SergeyA

+0

@ SergeyA私は同意しますが、それらの回答者によって提案された推論は、私にとって意味のある意味を成し遂げません。 – johnbakers

+0

emplaceの方が実行時のパフォーマンスが向上します。コンパイル時間について何も知らない。私はそれに意味のあるインパクトがあるとは思わない。 –

答えて

0

ランタイムとコンパイル時にemplacepush_backconstructionを比較しているので、多くの質問がここにあります。コンパイルを先に進めましょう。

コンパイルでは、ソースコードをアセンブリ命令に変換します。アセンブリ命令を出す前に、通常、2つの段階があります:字句解析と構文解析。レキシングはシンタックスをチェックしており、解析はセマンティクスをチェックして処理しています(これもまた非常に簡単です)。

my_vector.push_back(value); 
my_vector.emplace(value); 

、スキャン解析し、評価するために必要な作業はほぼ同一である必要があります:

は二つの文を考えます。したがって、コンパイル時には違いはありません。

また、ほとんどのコンパイラの処理速度では、コンパイル時間に差がある場合、コンパイラを開始する時間であると比較して無視できる程度です。せいぜい、私はミリ秒を節約すると思います。これらが1000を超える場合は、コンパイル時間を短縮できます。コンパイラの仕上げまでの人間の反応時間は1秒以上です。したがって、節約はまだ無視できるか、価値がない。

実行時にはプロファイルする必要があります。例えば、emplacepush_backよりも1ms早いとします。あなたのプログラムが連続して実行されていて中断されていない場合は、1秒間を得るためには、1000を超えるemplaceの関数を実行する必要があります。 1分を節約するには60000以上を実行する必要があります。 I/Oや他のタスクが完了するのを待つことによって、この節約はすべて失われる可能性があります。おそらくミリ秒ではなく、ナノ秒を節約するでしょう。

正確で堅牢なコードに努力してください。あなたのプログラムが正しかった後に最適化について心配するだけで、フォールトはなく、クラッシュしません。ユーザーが遅いと言う場合、重要なタイミングイベントを満たしていないか、メモリに収まらない場合にのみ最適化します。このミクロ最適化を検討しているときに書いたコードの量を考えてみましょう。

関連する問題