一:概述:
堆是一个大容器,它的容量要远远大于栈,这可以解决由于栈造成的内存溢出的困难(由于栈一般都是以k为单位,如果程序中直接将较大的数组保存在函数内的栈变量中,很可能会内存溢出)。一般比较复杂的数据类型都是放在堆中。但是在C语言中,堆内存空间的申请和释放需要手动通过代码来完成.
二.介绍:
在这个文件中:
#include "stdlib.h"
有这两个函数:
void *malloc(size_t __size) __result_use_check __alloc_size(1);
void free(void *);
如果malloc分配成功:则返回指向被分配内存空间的指针
不然,返回空指针NULL。
同时,当内存不再使用的时候,应使用free()将内存块释放掉。
关于:void *,表示未确定类型的指针。C,C++规定,void *类型可以强转为任何其他类型的的指针。
三.例子:
用来在堆中申请内存空间的函数还有calloc和realloc,用法与malloc类似。
四、学习内存管理的目的
学习内存管理就是为了知道日后怎么样在合适的时候管理我们的内存。那么问题来了?什么时候用堆什么时候用栈呢?一般遵循以下三个原则:1.如果明确知道数据占用多少内存,那么数据量较小时用栈,较大时用堆;
2.如果不知道数据量大小(可能需要占用较大内存),最好用堆(因为这样保险些);
3.如果需要动态创建数组,则用堆。
int main(){
int i;
scanf("%d",&i);
int *array = (int *)malloc(sizeof(int) *i);
//。。。//这里对动态创建的数组做其他操作.
free(array);
}