C语言内存分配函数
记录C语言内存分配函数
C语言内布局
区域名 | 作用 |
---|---|
栈区(stack) | 保存函数局部变量、函数形参、该区域由编译器决定,程序员无法管理 |
堆区 | 可扩充变化的内存区域,该区域的大小由程序运行时和程序员决定 |
静态存储区 | 存放static数据的地方 |
常量区 | 存放不可写,只可以读的数据的区域,由const修饰 |
程序代码区 | 存放二进制代码的地方 |
C语言常用的内存分配函数
函数名 | 作用 |
---|---|
void * malloc (size_ t size) | 分类size大小的连续内存区域 |
void * calloc(size_ t n, size t size) | 分配n个size大小的连续内存区域 |
void * realloc(void * mem_ address, size_ t newsize) ; | 为以有的内存重新分配内存区域,如果老的内存区域有相邻的大小足够的块则执行扩充,否则重新在内存中开辟一块newsize大小的块,并把数据拷贝过去,删除原来的块 |
void free (void *ptr) | 释放ptr这个指针指向的内存块,告诉操作系统该内存块可被使用 |
- 内存分配与内存释放必须相同,如果分配大于释放则内存泄露,如果释放大于分配则会删除某些内存区域导致程序崩溃