Linux操作系统提供 了三个用于存储空间(进程的堆空间)动态分配的函数和一个用于释放内存空间的函数。
- malloc函数:给进程分配指定字节数的存储区,此存储中的初始值不为0,因此申请后要记得初始化一下。
- calloc函数:有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小,该空间的每一位都将被初始化为0。
- realloc函数:用于更改以前分配 区的长度(可以增加,也可以减少)。当为增加长度 时,可能需要 将以前分配 区间的内容迁移到另一个足够大的区域,在尾部提供增加的存储区,而新增加的区间内的初始化值是不确定的。
- free函数:用于释放由malloc、realloc、calloc分配的存储空间,这些空间会被送入系统的可用存储区池,可以被以上三个函数再次分配。
上面四个函数的头文件是:stdlib.h
void *malloc (size_t __size) | 返回一个指向分配空间的指针,如果返回NULL,说明没有可用内存了 |
void *calloc (size_t __nmemb, size_t __size) | 每一位会被初始化为0 |
void *realloc (void *__ptr, size_t __size) | 增加或减少申请的内存 |
void free (void *__ptr) | 释放上面三个函数申请的内存 |
malloc例子:
malloc只管分配内存,并不能对其进行初始化,所以得到的一片新内存中,其值将是随机的。一般意义上:我们习惯性的将其初始化为0。当然,也可以用memset函数的。
用memset来初始化,memset函数在string.h头文件里:
calloc例子:
realloc例子:
free释放内存:
谢谢阅读