1. 程式人生 > >memset 的效率以及原始碼分析

memset 的效率以及原始碼分析

第3行把int型別的c轉換成unsigned char型別,意味著截去c的高24位,只保留低8位。第4行把s當作unsigned char*型別,也就是說su中的每一個元素按8位計算。現在來看看文章開頭的那個程式碼會做什麼。c的二進位制 : 00000000000000000000000000000001(32位)1、c轉換為unsigned char 後:00000001(8位)2、將指標su(unsigned char型別)的每一元素(8位)賦值為00000001,迴圈4n次。3、memset()結束後,arr的每個元素按照int型別讀取,讀出來的就是1000000010000000100000001,十進位制就是16843009。不過如果是memset(arr,0,n*sizeof(int));的話可以使用,因為32位都是0
再來說memset()的效率問題。使用memset函式與將上面的函式程式碼寫在自己的程式裡是不一樣的,C標準庫中的memset對Cache的利用做了優化,具體的在《C專家程式設計》151頁有解釋(其實是我沒看懂),這裡給出測試: