ポインタのイテレータptr
の場合、std::fill_n(ptr, n, 0)
はmemset(ptr, 0, n * sizeof(*ptr))
と同じことを行うはずです(ただし、@ KeithThompsonのコメントはthis answerを参照してください)。memsetに対してstd :: fill_n(ptr、n、0)からどのようなパフォーマンスが期待できますか?
C++ 11/C++ 14/C++ 17モードのC++コンパイラでは、これらの条件を同じコードにコンパイルすることができますか?そして、/同じコードをコンパイルしないと、-O0とのパフォーマンスに大きな違いがありますか? -O3?
注:もちろん、答えのいくつか/ほとんどはコンパイラ固有のものかもしれません。私は1つか2つの特定のコンパイラだけに興味がありますが、答えを知っているコンパイラについて書いてください。
FWIW MSVSはテンプレートマジックを使用して、コンテナー内でmemsetとmemcpyを使用できるかどうかを判断します。アルゴがそのように実装されているかどうかは確かではありませんが、それは彼らが持つと思う跳躍ではありません。それは両方の方法と測定をコード化していると言いました。それはあなたに最高の答えを与えるでしょう。 – NathanOliver
@ChrisBeck:編集を参照してください。 – einpoklum
@ NathanOliver:しかし、 - memsetも何らかの形で実装する必要がある関数です。 – einpoklum