1. ホーム
  2. c++

[解決済み] C 言語の int 配列をゼロにリセットする方法:最速の方法は?

2022-05-18 02:33:08

質問

仮に T myarray[100] があり、T = int, unsigned int, long long int または unsigned long long int で、その内容をすべてゼロにリセットする最も速い方法は何ですか(初期化のためだけでなく、私のプログラムの中で何度も内容をリセットするために)?おそらくmemsetで?

のような動的配列のための同じ質問 T *myarray = new T[100] .

どのように解決するのですか?

memset (以下 <string.h> は、通常アセンブリで直接書かれ、手作業で最適化されたルーチンであるため、おそらく最も速い標準的な方法でしょう。

memset(myarray, 0, sizeof(myarray)); // for automatically-allocated arrays
memset(myarray, 0, N*sizeof(*myarray)); // for heap-allocated arrays, where N is the number of elements


ところで、C++では、慣用的な方法として std::fill (となります。 <algorithm> ):

std::fill(myarray, myarray+N, 0);

どの かもしれない に自動的に最適化されます。 memset と同じくらい高速に動作すると確信しています。 memset に対して int の場合、オプティマイザが十分に賢くない場合は、より小さな型に対して若干パフォーマンスが悪くなる可能性があります。それでも、疑問がある場合は、プロファイルを作成します。