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