前些天浏览网页的时候,电脑突然变的越来越慢。通过查看内存的使用发现,IE浏览器竟然占了500多兆的内存,所以写出来给我们一个提醒吧……
首先,我们需要对程序的运行做个简单的介绍:我们的程序在运行的时候系统会为我们开辟一个4G的虚拟空间,空间的地址由高到低依次存储为命令行参数,栈,堆,bss,data,Ro-data,text。
1.命令行参数:我们的程序调试通过之后,在终端中运行时输入的./a.out。
2.栈:存放局部变量。这里的栈我们需要和我们在adt中所说的stack(栈)不同,这里栈的数据是不需要我们程序员开辟和回收空间的,它是由系统进行统一管理的。当程序员定义一个变量时,系统会根据变量的类型自行开辟空间给变量使用,并在包含并且离它最近的一对大括号运行结束后,系统收回空间。程序员对这块空间没有释放的权限。
3.堆:存放局部变量。和栈相对的,是由程序员自行管理的。通过malloc和free实现对空间的申请和释放。
4.bss:存放未初始化的全局和静态变量,并把它初始化为0。
5.data:存放已初始化的全局和静态变量。
6.Ro-data:存放常量和字符串,不可被修改。
7.text:存放代码段。
我们所说的内存泄露就是由于程序员在程序中只是申请了空间,而没有进行释放,造成了内存的不断占用,直到系统崩溃或者用户结束程序的运行。
综上所述,我们在编写程序的过程中要始终遵循一个原则:谁申请,谁释放;谁打开,谁关闭。