bcopy、bzero和bcmp是傳統BSD的函數,屬於POSIX標準;mem*是C90(以及C99)標準的C函數。區別在於,如果你打算把程序弄到一個符合C90/C99,但是不符合POSIX標準的平臺時,後者比較有優勢。 NetBSD的代碼中有很多地方使用mem*(他們更偏愛mem*,以利於移植),即使內核也是如此,而FreeBSD的內核中則儘量避免使用(希望儘可能避免在內核中出現較多的C函數)。如果你提交代碼的話需要注意這些約定。 參考鏈接:http://anders0913.iteye.com/blog/417814
目標數組在棧上:
在數組較小的情況下,bzero的效率比memset高;當數組超過一定大小之後,bzero的效率開始比memset低;數組越大,memset的性能優勢越明顯。而在數組較小的情況下,memset的性能甚至不如直接for循環對數組中的每一個字節置零的方法。
目標數組在堆上:
測試在堆上的數組中,bzero和memset的效率,發現兩者差不多。可能由於,裏面原來的數據就比較有規則,不管是否先對數組置一隨機值。(malloc開闢字符數組空間時,會清零的。)