ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

c内存操作函数干到发抖的干货

2021-06-09 23:01:13  阅读:206  来源: 互联网

标签:malloc 干到 函数 dest void 干货 内存 size


文章目录


memcpy

作用:

拷贝内存空间,

返回值:

指向dest的指针。

void* memcpy(void* dest,void* src,size_t N);

注释:

其中dest为目标内存区,src为源内存区,N表示拷贝的字节数。

注意:

1.未考虑内存重叠情况。
2.灵活性高,因为memcpy函数并不关心被复制的数据类型,也就是可以面向任何数据类型进行拷贝。
3.dest指针要分配足够的空间,空间不足会出现段错误。
4.如果dest所指内存与src所指内存有重叠,会出现行为未定义的错误。

memmove

作用:

拷贝内存空间。

返回值:

指向dest的指针。

void* memmove(void* dest,void* src,size_t N);

注释:

dest为目标内存区,src为源内存区,N为拷贝字节数。

注意:

1.相比memcpy函数,当dest与src所指向的空间有重叠时,memmove仍然可以处理,执行效率稍差memcpy一点点。

malloc

作用:

动态内存分配。

返回值:

分配成功返回分配后内存的首地址,不成功则返回NULL;

void* malloc(size_t size);

注释:

size为分配内存块的大小。

注意:

1.malloc函数是在堆上进行操作的。
2.malloc函数一次只能申请一块内存区。
3.malloc函数不会对分配的内存进行初始化。

calloc

作用:

动态内存分配。

返回值:

与malloc相同。

void* calloc(int num,size_t size);

注释:

num为分配内存块的个数,size为分配内存块的大小。

注意:

1.对比malloc函数,calloc函数一次可以开辟多个内存区。
2.对比malloc函数,calloc函数会将分配的内存进行初始化为0的操作。

realloc

作用:

动态内存空间大小调整。

返回值:

调整成功返回调整后内存起始地址,失败返回NULL。

void* realloc(void* ptr,size_t size);

注释:

ptr为malloc或calloc等函数进行过动态内存分配的指针,size为重新分配空间的字节数,如果是0且ptr指向只有一个已存在的内存块,ptr所指向的内存会被释放并返回一个空指针。

注意:

1.原始内存中的数据保持不变。

free

作用

动态内存释放。

返回值

:无。

void free(void* ptr);

注释

ptr为malloc或calloc等内存分配函数所分配过动态内存空间的指针。

注意:

1.malloc和calloc与free是对应的关系,若动态分配的内存空间没有free释放掉,会造成内存泄漏。

memset

作用:

初始化指定内存空间。

返回值:

指向buffer的指针。

void* memset(void* buffer,int c,size_t N);

注释:

buffer为指定的内存空间,c为初始化内容,N为初始化的字节数。

注意:

1.memset是按字节为单位,对buffer所指的内存赋值。

错误操作:
int a[5];
memset(a,3,5*sizeof(int));//这里的情况下a里每个int元素被初始化成为。
00000011 00000011 00000011 00000011
正确操作:
memset(a,0,5*sizeof(int));//此时全部初始化为0;

标签:malloc,干到,函数,dest,void,干货,内存,size
来源: https://blog.csdn.net/Coach_zhang/article/details/117752342

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有