2013年6月27日木曜日

c++ newで配列を動的確保した際のゼロクリアについて

c++でプログラムを組んでると、配列をnew演算子で確保することが有ると思う。
確保した際、ゼロクリアが必要になる時、今まではforループを回すなりしてゼロクリアしていたのだが、簡単な方法が有ったようなので覚えておこうと思う。
int *array;
array = new int[N];
としていた所の2行目を、
array = new int[N]();
とすれば良い。

ちなみに自分の環境で時間計測をすると、普通にforループでゼロクリアした時よりも、2倍くらい速いようだ。ちなみにmemsetとも比較してみたが、memsetの方が1.5倍くらい速かった。

その確認過程で、配列サイズを大きくすると、ゼロクリア手法をとらなくてもゼロクリアされている?疑惑が出てきたのだが、これは自分の環境の問題なのだろうか…

参考
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200804/08040022.txt
http://d.hatena.ne.jp/uskz/20080421/p1
http://d.hatena.ne.jp/DOSEI/20111013/p1