C语言 分配内存不回收的后果
5个回答
展开全部
内存泄漏会因为减少可用内存的数量从而降低计算机的性能。最终,在最糟糕的情况下,过多的可用内存被分配掉导致全部或部分设备停止正常工作,或者应用程序崩溃。
内存泄漏可能不严重,甚至能够被常规的手段检测出来。在现代操作系统中,一个应用程序使用的常规内存在程序终止时被释放。这表示一个短暂运行的应用程序中的内存泄漏不会导致严重后果。
在以下情况,内存泄漏导致较严重的后果:
* 程序运行后置之不理,并且随着时间的流失消耗越来越多的内存(比如服务器上的后台任务,尤其是嵌入式系统中的后台任务,这些任务可能被运行后很多年内都置之不理)
* 新的内存被频繁地分配,比如当显示电脑游戏或动画视频画面时
* 程序能够请求未被释放的内存(比如共享内存),甚至是在程序终止的时候
* 泄漏在操作系统内部发生
* 泄漏在系统关键驱动中发生
* 内存非常有限,比如在嵌入式系统或便携设备中
* 当运行于一个终止时内存并不自动释放的操作系统(比如AmigaOS)之上,而且一旦丢失只能通过重启来恢复。
内存泄漏可能不严重,甚至能够被常规的手段检测出来。在现代操作系统中,一个应用程序使用的常规内存在程序终止时被释放。这表示一个短暂运行的应用程序中的内存泄漏不会导致严重后果。
在以下情况,内存泄漏导致较严重的后果:
* 程序运行后置之不理,并且随着时间的流失消耗越来越多的内存(比如服务器上的后台任务,尤其是嵌入式系统中的后台任务,这些任务可能被运行后很多年内都置之不理)
* 新的内存被频繁地分配,比如当显示电脑游戏或动画视频画面时
* 程序能够请求未被释放的内存(比如共享内存),甚至是在程序终止的时候
* 泄漏在操作系统内部发生
* 泄漏在系统关键驱动中发生
* 内存非常有限,比如在嵌入式系统或便携设备中
* 当运行于一个终止时内存并不自动释放的操作系统(比如AmigaOS)之上,而且一旦丢失只能通过重启来恢复。
展开全部
C里面使用自动分配内存,比如说malloc<分配自由存取区,就把它当作是在堆上分配的了>,他的好处是可分配的内存更大更灵活<理论上可以分配用户空间能使用的所有虚拟内存空间>,它是通过链式分配的,比如说有这样的一个语句
int *p=(int *)malloc(sizeof(int)),意思是,先在栈上创建一个int类型的指针变量,再在堆上分配4个字节大小的空间<32位>,再把创建的内存首地址赋给p;
在上面这个题目中,p是在栈上分配的<就是所谓的手动分配<最多能分配的好象是1M空间的大小,有的说是2M>,正因为在堆上分配的它不可以自动回收内存,所以要显试的调用free()来收回内存,还有就是如果p是局部变量的时候,一定要在p的作用域内调用free(),因为p是在栈上分配的,一但清栈之后<p的作用域没了>,这个时候你要是想在其他地方调用free就没效果了,这个就象链表的头指针丢失
当你学C++的时候,研究一下new和malloc吧
int *p=(int *)malloc(sizeof(int)),意思是,先在栈上创建一个int类型的指针变量,再在堆上分配4个字节大小的空间<32位>,再把创建的内存首地址赋给p;
在上面这个题目中,p是在栈上分配的<就是所谓的手动分配<最多能分配的好象是1M空间的大小,有的说是2M>,正因为在堆上分配的它不可以自动回收内存,所以要显试的调用free()来收回内存,还有就是如果p是局部变量的时候,一定要在p的作用域内调用free(),因为p是在栈上分配的,一但清栈之后<p的作用域没了>,这个时候你要是想在其他地方调用free就没效果了,这个就象链表的头指针丢失
当你学C++的时候,研究一下new和malloc吧
追问
如果我不释放,会怎样?链表丢失什么后果?
追答
不会丢失,丢失是你自己丢了步骤拷贝的排序算法是带头结点的。而我自己的链表是不带头结点的。我把链表的算法那里改了,但是目前还没搞定
大晚上答个题也不容易啊 可以采纳吗 谢谢你了啊
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对于C++,自动分配扩展内存,对于C只在使用基本内存,不释放的程序运行会迟缓
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序运行过程中 这块内存被占用,程序停止后,内存回收
追问
如果太大,没法回收会怎样?
追答
没法回收这亏内存 就一直被标识为占用别的程序 没法用了 内存泄露
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不回收就不回收呗,就一直占用着内存吧...不是很大的软件无所谓啊....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询