C 4.3.2 でサイズ 100000000 の配列 (unsigned short int) と、サイズ 1000000 の他の 2 つの int 配列を初期化していました。
そのため、ループによる値の追加には時間がかかるため、配列をデフォルト値 0 で動的に初期化することにしました。
私の質問は、配列をデフォルト値で動的に初期化する方法ですか?
関数を使用して、void *calloc(size_t nmemb, size_t size);
メモリを初期化できます。0
この
calloc()
関数は、それぞれ size バイトの要素の配列にメモリを割り当てnmemb
、割り当てられたメモリへのポインタを返します。 メモリは に設定されていzero
ます。nmemb
または size が0
の 場合、 または後で に正常に渡すことができる一意のポインタ値をcalloc()
返します。NULL
free()
calloc(number of elements, sizeof(type));
または、memset()
明示的に使用して、呼び出しによって割り当てられたメモリを初期化することもできmalloc()
ます。
注: calloc()
どちらも魔法ではありません。また、どこかでループを使用して、ガベージをすべてゼロに置き換えます。
何をしても、初期化時間をなくすことはできません。あなたができる最善のことは、それを最適化しようとすることです。2つのテクニックが思い浮かびます:
アンローリングは、おそらく最適化コンパイラによって適用されます。
初期化のオーバーヘッドを重要でないセクションに移動することもできます。たとえば、プログラムの開始時にゼロで初期化される静的変数を使用できます。または、対照的に、最初の使用まで初期化を遅らせることができます (遅延初期化)。