编程语言
首页 > 编程语言> > C++ memset 踩坑

C++ memset 踩坑

作者:互联网

文章目录

一、前言

memset 作为对内存初始化的函数,还是有不少坑和误区的,今天就来对这个函数作一个总结。

二、函数作用
const int maxn = 1024;
int a[maxn];
memset(a, 0, sizeof(a));  // a[0]=a[1]=a[...]=0;
三、效率对比

对长度为 10000000 的数组,执行100次调用;

模式 memset for
debug 375ms 2156ms
release 343ms 329ms
四、误区总结

1、按字节设置

	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

2、设置的值只有最低字节有效

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));

3、堆内存不可直接 sizeof 取首地址

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));

4、传参数组不可直接 sizeof 取首地址

void fun(int a[maxn]) {
    memset(a, 0, sizeof(a));
}
void fun(int a[maxn]) {
    memset(a, 0, maxn * sizeof(int));
}

标签:00000101,字节,int,memset,C++,maxn,sizeof
来源: https://blog.51cto.com/u_15239535/2836972