私は既存の1Dアレイを持っています、memset
それをゼロにする最速の方法ですか?既存の配列をゼロにする最速の方法は何ですか?
答えて
最速...おそらくはい。 バギーはほぼ確実です!
多くの場合、実装、プラットフォーム、および配列の種類によって異なります。
C++では、変数が定義されるとそのコンストラクタが呼び出されます。配列が定義されると、配列のすべての要素のコンストラクタが呼び出されます。
アレイタイプがすべてゼロで表現できる初期状態を持つことがわかっていて、既定のコンストラクタが何も実行しない場合にのみ、メモリを消去することは「良好」とみなすことができます。
これは一般にです。組み込み型の場合は、他の型の場合はfalseです。
最も安全な方法は、デフォルトの初期化された一時的な要素を割り当てることです。 Tがchar
ある場合、関数はインスタンス化memset
とおりに変換し、
template<class T, size_t N>
void reset(T* v)
{
for(size_t i=0; i<N; ++i)
v[i] = T();
}
注意。だから、同じスピードで、それ以上のスピードはありません。
プラットフォーム:Windows、タイプ:float、サイズ:1e6。また、ランタイムスピードが最優先事項であり、安全性よりも重要です。 – Shibli
@ Shilbli:上記のテンプレートでも良いです:memsetはバイトを設定します。私の関数は、プロセッサワードと同じサイズの浮動小数点数を設定します。コンパイラが最適な最適化を持っている場合(レジスタにペースiを入れ、外部ループ定数としてT()を保持する)は、特殊化されていないmemsetよりも高速です。 しかし、それはほとんどがライブラリではなくコンパイラに依存しています。 –
これは、標準ライブラリで 'std :: fill_n'を使って行うことができます。 – Blastfurnace
実装固有のため、これはわかりません。しかし、一般的には、memset
が最も速くなります。なぜなら、ライブラリの実装者は、非常に高速化するために多くの時間を費やしています。そして、コンパイラは、を知っているため、手作業では実行できない最適化を行うことができます。はmemset
を意味します。
サポートされている場合は、組み込み関数については言及しません。 –
非常に大きな配列の場合、ターゲットマシンのストレージ管理機能を利用して、 'calloc'が高速になることがあります。しかし、厄介な内部を掘り下げることなく知る方法はありません。 –
@HotLicks彼は "既存の配列"と言っていた –
- 1. IDの配列をクエリする最も速い方法は何ですか?
- 2. 既存の配列キーに一重引用符を追加する最も良い方法は何ですか?
- 3. SQLiteに配列を保存する最も良い方法は何ですか?
- 4. 文字列配列をdouble配列に変換する最速の方法は?
- 5. 既存のイメージ値を$ _FILES配列に配置する方法
- 6. ペアの配列で最も近い数のペアを見つける最も速い方法は何ですか?
- 7. numpy配列を文字列にダンプする最速の方法
- 8. perlで文字列をインクリメントする最速の方法は何ですか?
- 9. C++の配列要素のポインタからインデックスを取得する最速の方法は何ですか?
- 10. Java - 配列から文字列を置換する最も速い方法は何ですか
- 11. ポインタ配列を定数で減算する最速の方法
- 12. Cで配列を分割する最速(ポータブル)の方法#
- 13. 私のモデルオブジェクトの配列を削除する最速の方法は何ですか?
- 14. SharedPreferencesで文字列のセットを保存する最も速い方法は何ですか?
- 15. 既存のオブジェクトにオブジェクトや配列を追加する方法
- 16. 既存の配列にキーを追加する方法
- 17. SQL ServerからvarbinaryデータをC#Byte配列に変換する最も速い方法は何ですか?
- 18. PHPで配列に数値を代入する最も速い方法は何ですか?
- 19. 文字列の配列をオブジェクトの配列に変換する最良の方法は何ですか?
- 20. 生の配列をstd :: vectorに渡す最速の方法
- 21. 既存の文字列のすべての部分文字列を決定する最も速い方法
- 22. メテオでIPトラックツールをインストールするには、最速/最速/最も経済的な方法は何ですか?
- 23. PHPにURLが存在するかどうかを判断する最速の方法は何ですか?
- 24. 膨大な量のユニークな文字列を保存する最も速い方法は何ですか?
- 25. 配列内の結果を検索する最速の方法
- 26. バイト配列をIntStreamに変換する最良の方法は何ですか?
- 27. デスクトップをストリーミングする最も速い方法は何ですか?
- 28. タイプをチェックする最も速い方法は何ですか?
- 29. numpyの配列のリストが等しい場所を見つける最も速い方法は何ですか?
- 30. そのエントリがデータベースに存在することを確認する最速の方法は何ですか?
関連:http://stackoverflow.com/questions/8528590/what-is-the-advantage-of-using-memset-in-c – Mysticial
はい、これまでのところ最速です。 mem ...すべての人は、目的地の単語だけでなく目的地のバイトを設定する方法を理解しているので、高速です。つまり、例えば4バイトのゼロバイトがメモリワードに移動される場合、memsetはメモリロケーションをすべて1つにクリアします。ボーナスとして、memsetとmemmoveとmemcopyは移植可能です。 –
'memset'はすべてのビットを0に設定しますが、それはいつも起こっているとは限りません。あなたは移植性に気をつけますか?配列には何が入っていますか? –