No.5ベストアンサー
- 回答日時:
memsetによる初期化はいろいろ問題があるのでお勧めしませんが、int型の配列であれば実害はないので、状況次第では使ってもよいでしょう。
効率に関してですが、memsetの一般的な実装では、前後の半端を除けば、ワード単位で書き込みを行います。あるいは、ストリング命令やブロック転送命令があるプロセッサの場合は、最も効率のよいコードに展開されます(関数の呼び出しも発生しません)。
std::fillやstd::fill_nを使うと関数呼び出しのオーバーヘッドは発生しますので、効率のことをいうのであれば必ずしも最適ではありません。ただ、普通は一番よい選択だと思います。
いっそのこと、
class MyClass {
struct Member { int array[20]; } m;
public:
MyClass() : m(Member()) {}
};
のようにするのもよいと思います。
memsetよりはずっと健全ですし、STLが使えない場合でも大丈夫ですし、おそらくコンパイラは最も効率の良いコードを出力すると思います。
No.3
- 回答日時:
処理系にもよりますが、この場合memsetの方が速いというのは幻想だと思います。
結局memset関数の中で、ループしてメモリを初期化しています。
しかも、memsetは、バイト単位の初期化になるため、
int20個の初期化は80回ループになります。
memset関数を呼び出すための関数呼び出しオーバーヘッドもあります。
処理系によっては、memsetをインラインで最適化して
処理してしまうケースもあると思いますが、
結局、質問に書かれているコーディングの通り、
int型変数(32ビット領域)に0を代入する処理を20回繰り返す処理を記述するのが
性能的に最も最適化されたコーディングだと思います。
ただ、memsetで初期化処理を記述する方がわかりやすいので、
メンテナンス性を考慮して、memsetにすべきという意見はあると
思います。私も特に性能を考慮する必要がない限りmemsetを使います。
今回のケースは、たいして複雑な初期化でもないし、
性能差もnsecレベルの話だと思うので、どちらでもよいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# 配列の初期化についてです。 int 例のプログラムで int x[5]={1,2,3,4,5}; x 1 2022/05/29 15:00
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
define で 配列
-
C言語から質問です。
-
C言語の2次元配列 容量が大き...
-
構造体のextern方法
-
C言語の課題が出たのですが自力...
-
c言語 構造体
-
C#でのフィボナッチ数列
-
C言語において、 配列要素をひ...
-
C言語でエラーの直し方が分かり...
-
構造体の配列 char *' 型は 'ch...
-
MFC - ダイアログボックスのPic...
-
2番目の最大値を求める
-
char型配列をint型に代入するには
-
関数への構造体の配列の渡し方<...
-
C言語の配列のコピーについて
-
C言語についてです 5人のテスト...
-
ポインタを使って構造体の配列...
-
関数のプロトタイプ宣言
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
c言語
-
構造体のextern方法
-
define で 配列
-
C#で構造体の配列を持った構造...
-
C言語において、 配列要素をひ...
-
コンボボックスでデフォルト値...
-
2番目の最大値を求める
-
C言語の2次元配列 容量が大き...
-
C#で配列が空かを判定するには?
-
MFCのCArrayを使った二次元配列
-
C言語の課題が出たのですが自力...
-
C言語 ファイルの指定された行...
-
Cのエラー
-
ポインタを使って構造体の配列...
-
配列のアドレス部
-
char型配列をint型に代入するには
-
MFC - ダイアログボックスのPic...
-
C言語から質問です。
おすすめ情報