智锐科技:关于内存泄漏(内存丢失)的问题!

来源:百度文库 编辑:高考问答 时间:2024/04/29 22:58:46
内存泄漏是个什么概念?什么时候引起内存泄漏?假如一个程序造成内存泄漏很严重从而引起系统速度很慢的话,重起计算机是不是就可以了(也就是说它不是造成了内存的丢失,只是程序没有回收不用的空间?)?内存丢失与硬件的内存没有关系吧?

内存泄露是指程序中间动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况,重起计算机可以解决,但是也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件引起的。

比如以下程序就有一个内存泄漏
main()
{
int *a;
int c=1;
a=(int*)malloc(sizeof(int));
a=&c; //分配给a的4个字节的空间没有办法回收了
return 0;
}
当这段程序运行完后就会造成4个字节的内存空间泄漏(在int为32位时),因为开始a分配了int的空间,然后又让a指向c,则刚开始分配的空间无法得到地址,也就无法用free来释放。
如果对于一个长期运行的程序,内存泄漏可能会造成可用内存空间不断减少,最终因内存不足而当机。
对于小的程序,只要程序结束以后整个程序占用的空间也就由操作系统自动释放了,不过在编程时还是要注意对于动态分配内存的管理,养成良好的习惯。
在JAVA中有垃圾回收机制,可以把无法调用的空间自动回收,因此JAVA程序没有内存泄漏的问题。