免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lsupper
打印 上一主题 下一主题

最近在弄C++方面,突然想到C的话,出现异常情况,如何善后? [复制链接]

论坛徽章:
0
41 [报告]
发表于 2010-11-15 13:18 |只看该作者
感觉楼主多虑了.

为什么总是要求实时地处理异常呢? 如果都实时,这样不就等于说交付的永远是个Beta版,没有完整地通过测试吗?

C里的判断和C++里放在try, catch里的道理是一样的。你永远也不可能处理那些你没有预料到的异常。能预料的都是基于历史的^^

论坛徽章:
0
42 [报告]
发表于 2010-11-15 13:36 |只看该作者
还需要指出的是操作系统是可以清理一些资源,但有些资源还是必需手动清除的,比如动态分配的内存.======= ...
unistd 发表于 2010-11-15 13:01

说Symbian只是举个例子,希望探讨技术,别动气.

什么是一个完整的操作系统,完整的操作系统概念的定义是什么?

完整的多用户是完整的操作系统的必备的功能之一吗?
那么ecos,VxWork,ios,android等嵌入式OS都需要支持多用户吗?它们不是一个完整的操作系统?


现在恢复你的疑问:

"完整的多任务"

这个在Symbian OS早已经实现,不过手机还得是中高端.也就是说:软件功能实现了,得看硬件的配置;


"完整的进程隔离"

Symbian OS没有采用UNIX/Linux采用fork的机制,进程从创建开始就是独立的,没有父子进程,会话,进程组的概

念,进程是一个OS必备的功能,而Symbian OS同样提供,只是没有像UNIX/Linux的进程机制那样复杂.


"谁告诉你操作系统不能释放动态分配的内存?"

void* buf = malloc(1024);

请问如果不调用free,OS会在进程退出后收回buf所指的空间吗?


对于清除栈,我只是觉得这样设计很合理,能够彻底解决资源泄漏的问题,所以我提了一下.


再次重申:希望作技术层次的交流和探讨:wink:

论坛徽章:
2
水瓶座
日期:2013-09-04 15:09:57白羊座
日期:2014-04-17 16:48:13
43 [报告]
发表于 2010-11-15 13:43 |只看该作者
本帖最后由 l2y3n2 于 2010-11-15 14:17 编辑
"谁告诉你操作系统不能释放动态分配的内存?"

void* buf = malloc(1024);

请问如果不调用free,OS会在进程退出后收回buf所指的空间吗?
osmanthusgfy 发表于 2010-11-15 13:36


    请告诉我哪个现代OS不会回收这个buf空间的?

论坛徽章:
0
44 [报告]
发表于 2010-11-15 13:47 |只看该作者
请告诉我哪个现代OS不会回收这个buf空间的?

   你自己写的OS吗?
l2y3n2 发表于 2010-11-15 13:43



    按照你的意思,我们都不需要使用free或delete了?

论坛徽章:
2
水瓶座
日期:2013-09-04 15:09:57白羊座
日期:2014-04-17 16:48:13
45 [报告]
发表于 2010-11-15 13:48 |只看该作者
要求程序异常退出的时候要做其他OS不能保证的工作,比如说要写入log、或者比如Socket通讯给远程服务器手动发送什么特别的通知的话,Linux下可以用signal,SIGSEGV信号

论坛徽章:
2
水瓶座
日期:2013-09-04 15:09:57白羊座
日期:2014-04-17 16:48:13
46 [报告]
发表于 2010-11-15 13:49 |只看该作者
按照你的意思,我们都不需要使用free或delete了?
osmanthusgfy 发表于 2010-11-15 13:47



    如果只有在程序退出的时候才有free的需求的话,是的

论坛徽章:
0
47 [报告]
发表于 2010-11-15 14:00 |只看该作者
如果只有在程序退出的时候才有free的需求的话,是的
l2y3n2 发表于 2010-11-15 13:49


那为什很多c/c++书籍对内存管理老是强调?甚至还搞出一套套gc机制出来,

c/c++也没有必要搞什么malloc/free,new/delete了.我们把垃圾回收的任务扔给OS就行了.

不是很理解,可能是没有去研究OS的源码了.学习后再作定夺.

不论结论是否正确,还是很感谢你的交流.

论坛徽章:
0
48 [报告]
发表于 2010-11-15 14:06 |只看该作者
本帖最后由 donotblock 于 2010-11-15 14:08 编辑
那为什很多c/c++书籍对内存管理老是强调?甚至还搞出一套套gc机制出来,

c/c++也没有必要搞什么malloc ...
osmanthusgfy 发表于 2010-11-15 14:00



    那是因为很多服务器端程序会一直运行很长时间,比如google的某个服务。 退出或重启程序代价会非常大,这就要求内存不能泄露。
    不用看OS源码再定夺,现代OS都会清理进程资源,在进程退出的时候。 是你理解错了内存泄漏这回事儿。

论坛徽章:
2
水瓶座
日期:2013-09-04 15:09:57白羊座
日期:2014-04-17 16:48:13
49 [报告]
发表于 2010-11-15 14:11 |只看该作者
= =不是所有的程序都只跑一下就退出。

需要一直跑的守护进程,又要求动态申请动态释放的话自然需要malloc/free函数了

一般的程序正常退出的时候自己手动free一下看起来也比较舒服。

但是LZ的问题是程序异常退出的时候,这种时候找到异常点,解决问题才重要吧
是不是要手动free那些本来OS就会回收的东西,我觉得不是那么重要

论坛徽章:
0
50 [报告]
发表于 2010-11-15 14:55 |只看该作者
回复 36# 蔡万钊


    嗯,谢谢!跟你讨论收获颇多...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP