memset 做爲對內存初始化的函數,仍是有很多坑和誤區的,今天就來對這個函數做一個總結。避免後期使用不當踩入坑。數組
最簡單的調用就是將一個數組清零,代碼以下:函數
const int maxn = 1024; int a[maxn]; memset(a, 0, sizeof(a)); // 結果:a[0]=a[1]=a[...]=0;
直接調用 memset 接口清零 和 調用循環進行清零,進行一個測試後以下:測試
對長度爲 10000000 的數組,執行100次調用;
模式 | memset | for |
---|---|---|
debug | 375ms | 2156ms |
release | 343ms | 329ms |
memset(a, 5, sizeof(a));
memset(b, 5, sizeof(b));
memset值 | char | short | int | long long |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
-1 | -1 | -1 | -1 | -1 |
5 | 5 | 1285 | 84215045 | 361700864190383365 |
memset(a, 0x05ffffff, sizeof(a)); memset(a, 0xffffff05, sizeof(a)); memset(a, 0xffffff08, sizeof(a)); memset(a, 0x12345678, sizeof(a));
memset(a, 0xff, sizeof(a)); memset(a, 0x05, sizeof(a)); memset(a, 0x08, sizeof(a)); memset(a, 0x78, sizeof(a));
在堆上申請了一個數組空間,而且想要給它初始化,調用以下:優化
const int maxn = 1024; int *p = new [maxn]; memset(p, 0, sizeof(p));
const int maxn = 1024; int *p = new [maxn]; memset(p, 0, maxn * sizeof(int));
void fun(int a[maxn]) { memset(a, 0, sizeof(a)); }
void fun(int a[maxn]) { memset(a, 0, maxn * sizeof(int)); }
參考於:CSDN- 英雄哪裏出來https://blog.csdn.net/WhereIsHeroFrom/article/details/111660632.net