- ベストアンサー
int型配列の一括初期化
現在、ある配列をfor()でループさせて初期化させていますが、もっと高速に初期化できる方法はないでしょうか? //配列の初期化 int Xi[256]; for(i = 0; i < 256; i++){ Xi[i] = 0; } 今後、配列数を増やす予定なので高速に初期化できるものはないか探しています。 速度重視でよろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
全ての要素が0で初期化された配列を確保したいのであれば、calloc()を使うというのはどうでしょうか? 上記のコードより速いという保証はありませんが。 #include <stdlib.h> int *Xi = (int *)calloc(256, sizeof(int)); 配列が不要になった時点でfree(Xi)するのをお忘れなく。また、初期値が0以外の場合にはこの手は使えません。
その他の回答 (5)
- jacta
- ベストアンサー率26% (845/3158)
処理系不明のままでは、まともな回答は得にくいと思います。 インタープリタの場合はループで記述すると十分遅いと思いますし、そこまでいかなくても、(たとえ今時のものでも)8ビットマイコンなんかでは高速とはいいがたいでしょうね(かといって、代案があるかどうかはハードウェアしだい)。 というわけで、処理系を補足してください。
- titokani
- ベストアンサー率19% (341/1726)
いまどきのCPUなら、それで十分高速。 それ以上の高速化を望むなら、アセンブラ出力を見ながらゴリゴリやることになるので、CPU情報がないとなんともいえません。
- jacta
- ベストアンサー率26% (845/3158)
Cの仕様の範囲では、 int Xi[256] = {0}; が最速になる可能性が一番高いはずです。 callocは非常に遅いので論外です。 もっと速くということであれば、アセンブリ言語でアーキテクチャに依存したコードを書く必要があります。
- Werner
- ベストアンサー率53% (395/735)
int Xi[256] = {0}; で全要素が0で初期化されます。 (初期化子の要素数が、配列の要素数よりも少ない場合、 残りの要素は全て0で初期化されるため。) 速度はどうか知らないけど書くのは楽。 速度に関してはコンパイラの最適化が効いてるなら特にどうこうする必要はないでしょう。
- rabbit_cat
- ベストアンサー率40% (829/2062)
最近のコンパイラであれば、おそらく、そのままで最速なコードが生成されると思います。下手になんかしないほうが多分速い。 もし、本当にコンパイラが生成するコードよりも速い方法がほしいとなると、これはもう、初期化の部分だけではなくて、実際に配列を使う部分のアルゴリズムも一緒に考えて、配列の一部をレジスタにもつとか、かなりトリッキーなことをすることになると思います。
お礼
やっぱり、配列よりポインタのほうが高速なのでしょうかね。 参考にさせていただきます。