bzero與memcpy的區別

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開闢字符數組空間時,會清零的。)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章