头文件
#include <stdlib.h>
malloc
void *malloc(size_t size);
void指针可以指向任意类型的数据,所以C语言中可以不用强制类型转换,但是在C++中必须进行强制类型转换(例如:char *p = (char *)malloc(256);
),否则报错;
对应的内存释放函数为:void free(void *p);
calloc
void *calloc(size_t nmemb, size_t size);
分配nmemb个类型大小为size的对象组成的数组,并且初始化为0;
对应的内存释放函数为:void free(void *p);
realloc
void *realloc(void *ptr, size_t size);
增加或减少以前分配的长度,当增加长度时,原本内存的内容可能会被移动到重新分配的足够大的内存区域,而新增的内存初始值是不确定的;
realloc(NULL, size); 等价于 malloc(size);
realloc(p, 0); 等价于 free(p);
对应的内存释放函数为:void free(void *p);
alloca
#include <alloca.h>
void *alloca(size_t size);
与malloc操作类似,但是malloc申请的是堆中,而alloca函数申请的内存是在栈中,所以alloca申请的内存不能调用free函数来释放,栈内存在函数结束后自动释放。它的缺点就是会增加栈的长度,而在有些系统可能不支持增加栈的长度,所以也就不支持该函数。