1. ホーム
  2. c

[解決済み] なぜmemsetではなくbzeroを使用するのですか?

2022-03-14 13:05:18

質問

前学期に受講したシステム・プログラミングの授業で、基本的なクライアント/サーバーをC言語で実装することになったのですが、構造体を初期化する際に sock_addr_in やcharバッファ(クライアントとサーバーの間でデータをやり取りするために使用する)を使用するように教授から指示されました。 bzero であり memset を使って初期化することができます。 その理由は説明されませんでしたが、正当な理由があるのでしょうか?

ここに書いてありますね。 http://fdiv.net/2009/01/14/memset-vs-bzero-ultimate-showdown その bzero はメモリをゼロにするだけなので、より効率的です。 memset を行う可能性があります。 それでも、必ずしも memset を使用することで、メモリをゼロにすることができます。

bzero は非推奨とされており、さらにCの標準的な関数ではありません。マニュアルによると memset よりも優先されます。 bzero という理由からです。 では、なぜまだ bzero オーバー memset ? 単に効率が良いだけなのか、それともそれ以上のものがあるのか? 同様に memset オーバー bzero というのは、新しいプログラムでは事実上好ましい選択肢になっているのでしょうか?

解決方法は?

を優先する理由が見当たらない。 bzero オーバー memset .

memset は標準的なCの関数であるのに対し bzero はCの標準関数になったことはない。その理由はおそらく、同じ機能を memset 関数を使用します。

さて、効率についてですが、コンパイラは gcc のビルトイン実装を使用します。 memset を指定すると、特定の実装に切り替わります。 0 が検出されます。同じく glibc ビルトインが無効の場合。