前言
首先我们知道,内存可以分为三个部分,分别为静态储存区内存,栈区内存和堆区内存,其中他们各自有着好处和过人之处,在这里主要来说明堆区内存
静态储存区内存
静态储存区存储的变量为为全局变量,或者可以用static修饰的变量,他的好处实是在整个程序的运行中一直存在,直到程序结束
栈区变量
栈区变量申请的是局部变量或者auto修饰的变量,栈区变量的好处是使用方便,但是自由度小,他会随着函数的结束而被释放
堆区内存
我们知道在c/c++ 中定义的数组大小必需要事先定义好,他们通常是分配在静态内存空间或者是在栈内存空间内的,但是在实际工作中,我们有时候却需要动态的为数组分配大小,这时就要用到堆内存分配的概念。在堆内存中系统会通过链表去满足大小,堆内存是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆内存的大小受限于计算机系统中有效的虚拟内存。
内存空间的申请
首先需要头文件 # <stdlid.h>
其中我们常用的是malloc函数,使用这个函数向系统申请
char *p = (char) malloc (sizeof(char)); // 其中(char)为强制转换,也可以不写就为隐式转化,malloc 后面为字符的大小
其中malloc申请的内存不一定成功我们需要进行防错
if p==NULL //我们通过判断指针是否为空
{
perror (“申请内存失败”)
return -1;
}
申请的空间也不一定干净,我们需要用 bzero函数
bzero (p,sizeof(char)) bzeroz 中第一个变量应该为清零的首地址,后面为大小
最后使用完还需要释放,用到free,为了防止内存泄漏
free (p)//释放内存
同样,我们还有查看内存泄漏的软件,大家可以用valgrind --tool