- malloc() 分配没有被初始化过的内存
#include <stdlib.h>
void *malloc(size_t size);
size :要分配的字节数
void * : 返回指向新分配的内存的指针,执行失败返回NULL
标准调用规范:
#include <stdlib.h>
char *pmem;
if((pmem = malloc(sizeof(char)*100)) == NULL){
/*code here handles the failure*/
}
分配的堆内存在使用完后要用free函数释放,否则会出现内存泄漏。
- calloc() 分配并初始化内存块,把每个bit都设置为0
#include <stdlib.h>
void *calloc(size_t nmemb, size_t size);
- realloc() 可以使用realloc调整以前由malloc或calloc分配的内存的大小。
#include <stdlib.h>
void *realloc(void *ptr, size_t size);
ptr:由malloc或calloc返回的指针。
size:既可增大也可减小
- free() 释放一块内存。
#include <stdlib.h>
void free(void *ptr);
- alloca() 分配一块未经初始化的内存
#include <stdlib.h>
void *alloca(size_t size);
从进程的栈分配内存而不是堆中获得,而且当调用alloca的函数返回时,已经分配的内存会被自动释放。
- 对堆栈的总结
栈区(stack):由编译器自动分配释放,存放函数的参数值、局部变量的值。
堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。
全局区(静态区):全局变量和静态变量的存放,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
文字常量区:常量字符串放在这里。程序结束后由系统释放。
程序代码区:存放函数体的二进制代码。