内存分配
内存分堆空间与栈空间。栈空间完全操作系统管理:分配与释放。堆空间,在程序启动初始化时,由系统分配一部分,之后在运行过程程,再需要开辟堆空间,就需要手动分配,使用完毕后,需要释放内存,否则就会有内存泄露。
栈内存是有限的,一般就几MB,是在系统环境下一个确认的常数值。而堆内存,理论上可以申请达到系统剩余内存的最大值;实际上,可能没那么大,但至少也有几个GB。下文的内存分配函数,都是分配在堆内存中的。
在<stdlib.h>中,提供了四个用于内存分配与释放的函数:
- malloc 动态分配内存;返回void*
- calloc 为一组目标动态分配内存,并将分配后的内存空间初始化;返回void*
- realloc 重新分配内存;返回void*
- free 释放内存
malloc
void *malloc(size_t __size); 返回void指针,即任意类型指针。
这里的size_t,实际上是一个unsigned long类型;参数__size,用于指定分配的内存字节数
|
|
calloc
void *calloc(size_t __count, size_t __size); 返回void指针,即任意类型指针。
这里的__count表示,要分配的item数量,每个item的所占的内存字节数由__size指定。
|
|
realloc
void *realloc(void *__ptr, size_t __size); 为指针__ptr重新分配内存为__size长
free
void free(void *); 释放动态分配的内存