1. ホーム
  2. c

[解決済み] bzero() & bcopy() 対 memset() & memcpy()

2022-02-09 15:26:14

質問

非標準の bzero()bcopy() ではなく memset()memcpy() Linux環境では?Linuxのコンパイラに適しているという話はよく聞きますが、標準関数と比較しての利点は見たことがありません。

標準のものよりも最適化されているのか、それとも何か好まれる動作の特殊性があるのでしょうか?

どのように解決するのですか?

一方 bzerobcopy 関数は ISO C (非標準と言うからには実際の標準のことでしょう) ではないのです。 だった はPOSIX標準のものであり、ISO POSIXです。

これらの関数は POSIX.1-2001 で非推奨となり、現在も使用されています。 削除 を尊重し、POSIX.1-2008では memset , memcpymemmove . だから、可能な限りCの標準的な関数を使った方がいい。

がある場合は ロット を使用しているコードがあり、それをすべて変更したくない場合(おそらくは すべき を使用すると、以下のように簡単に代用することができます。

// void bzero(void *s, size_t n);
#define bzero(s, n) memset((s), 0, (n))

// void bcopy(const void *s1, void *s2, size_t n);
#define bcopy(s1, s2, n) memmove((s2), (s1), (n))