C++深度学习—资源问题,memset

来源:互联网 发布:淘宝小二作业是真是假 编辑:程序博客网 时间:2024/05/22 14:42

1、http://mindhacks.cn/2012/08/27/modern-cpp-practices/

看到有关于ScopeGuard的描述,真心大神啊!一定要好好琢磨一下。

2、memset()方法,void *memset(void *s,int c,size_t n)
总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。

注意这里是 首n个字节的值,所以sizeof取总长度 

作用是在一段内存块中填充某个给定的值,它是对较大的结构体数组进行清零操作的一种最快方法。

注意事项:
1、如果字符数组初始化或置某一值时,用法:
char a[5];
memset(a,0,5);
2、对于字符串数组来说,是不可以修改字符串的内容,如
char *a=“adgfa”;
memset(a,0,strlen(a)-1);//此时会产生访问冲突,因为:a是字符串常量,存储在内存中的静态存储区域(属于不可写空间)
3、如对int类型数组进行置零操作(注意:仅限于置零操作,不能进行置其他值的操作),需要这么用,如
int a[5];
memset(a,0,sizeof(a));
4、memset可以对结构体变量或结构体数组进行初始化处理,如:
structsample_struct
{
   charcsName[16];
   intiSeq;
   intiType;
};
对于变量
structsample_strcut stTest;
1)、一般情况下,清空stTest的方法:
stTest.csName[0]={'\0'};
stTest.iSeq=0;
stTest.iType=0;
2)、用memset就非常方便:
memset(&stTest,0,sizeof(structsample_struct));
3)如果是数组,方法如下:
structsample_struct TEST[10];
memset(TEST,0,sizeof(structsample_struct)*10);
注意:如果结构体中有数组的话还是需要对数组单独进行初始化处理的。