c語言memset源碼

來源:互聯網
上載者:User

標籤:const   語言   size   元素   str   情況   ++   details   blog   

c語言memset源碼

一、用法

void *memset(void *s, int ch, size_t n);
作用:將s所指向的某一塊記憶體中的每個位元組的內容全部設定為ch指定的ASCII值, 塊的大小由第三個參數指定,這個函數通常為新申請的記憶體做初始化工作。
不知道有沒有像我一樣把memset當作萬能的初始化工具,例如:
int arr[n];
memset(arr,1,n*sizeof(int));
這樣得到的arr數組一定不是全0,而是16843009,下面解釋原因。
首先,變數類型的本質只是標誌從某一記憶體位址開始讀取的位元,強制轉換就是改變讀取位元的大小。

 

二、源碼

下面來看memset的實現:(代碼來自《C標準庫》P398)

1 void *(memset) (void *s,int c,size_t n)2 {3     const unsigned char uc = c;4     unsigned char *su;5     for(su = s;0 < n;++su,--n)6         *su = uc;7     return s;8 }

第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頁有解釋(其實是我沒看懂),這裡給出測試:

 1 #include <string.h> 2 #define MAXSIZE 100000 3  4 int main() 5 { 6     char arr[MAXSIZE]; 7     for(int i=0;i<10000;i++) 8     { 9         memset(arr,‘0‘,sizeof(arr));10 //        for(int j=0;j<MAXSIZE;j++)11 //            arr[0] = ‘0‘;12     }13     return 0;14 }

程式裡的注釋部分與memset行分別使用,結果是使用memset的程式已耗用時間大約為0.1s,而用for迴圈的程式要3s多。
綜上:memset()可以用在字元數組的初始化以及類似於memset(arr,0,n*sizeof(int));的情況,效率比手動賦值要高的多。

 

參考:http://blog.csdn.net/hackbuteer1/article/details/7343189#

 

c語言memset源碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.