c内存操作函数干到发抖的干货
作者:互联网
文章目录
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