Linux 環境でandの代わりに非標準の and を使用する理由はありbzero()
ますか? 多くの人が Linux コンパイラに適していると言っているのを聞いたことがありますが、標準関数より優れている点は見当たりません。bcopy()
memset()
memcpy()
それらは標準のものよりも最適化されていますか、それとも優先される動作の特殊性がありますか?
#include <strings.h>
void bcopy(const void *src, void *dest, size_t n);
説明
このbcopy()
関数は、src から dest に n バイトをコピーします。両方の領域が重なっている場合でも、結果は正しいです。
準拠: 4.3BSD。b はBSD由来のようで、非推奨のようです。
これは、R.. が彼のコメントで述べたように、 notbcopy
に類似していることを意味します。memmove()
memcpy()
注:strings.h
も とは異なりstring.h
ます。
実は今は逆かもしれません。memcpy
andmemset
が標準に含まれているため、コンパイラは、呼び出された関数が標準で規定されていることを正確に実行すると想定できることがわかります。これは、コンパイラがそれらを、理解できる操作を実行する最も効率的な方法に置き換えることができることを意味します。一方、標準はそれらの動作を規定していないため、コンパイラーは何も想定できません。つまり、コンパイラーは実際の関数呼び出しを発行する必要がありbcopy
ます。bzero
ただし、たとえばGCCは、それらを備えたOS用に構築されているかどうかを認識していますbcopy
。bzero