免费注册 查看新帖 |

Chinaunix

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

[C] 小白求教大型程序里是一般是怎么封装malloc的? [复制链接]

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
11 [报告]
发表于 2014-06-30 10:21 |只看该作者
真相就是项目里从来不检查内存分配是否成功哈。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
12 [报告]
发表于 2014-06-30 12:55 |只看该作者
从来不检查malloc结果,直接用就是,如果因为内存不足程序挂掉,找老板加硬件
个别情况封装malloc还是有必要的,不是为了检查malloc结果,而是为了查找内存管理的bug。 像valgrind这种工具不能用的时候,就只有封装malloc和free了。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
13 [报告]
发表于 2014-06-30 13:04 |只看该作者
这么多不检查的

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
14 [报告]
发表于 2014-06-30 14:13 |只看该作者
回复 11# linux_c_py_php


    谢谢linux_c_py_php回复

    原来项目里是不检查的。。。。

    我觉得我还是检查下好,这样可以知道在哪个模块里出错了,就知道前面的模块可能有内存没free  

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
15 [报告]
发表于 2014-06-30 14:15 |只看该作者
回复 12# koolcoy


    谢谢koolcoy回复

    表示 valgrind 调试工具太高大上了。。。。

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
16 [报告]
发表于 2014-06-30 14:18 |只看该作者
回复 13# hellioncu


    谢谢hellioncu回复

    再请教下

    如果现代OS能保证malloc总是能成功,那么检查是不是就没有必要了?

    如果是这样,那么GCC在优化的时候,会不会把这个检查也优化没了?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
17 [报告]
发表于 2014-06-30 14:21 |只看该作者
Dannysd 发表于 2014-06-30 14:18
回复 13# hellioncu


保证不了,还是要检查的,特别是你的程序崩溃重启的代价比较大的时候

论坛徽章:
1
技术图书徽章
日期:2014-03-06 15:32:30
18 [报告]
发表于 2014-06-30 15:11 |只看该作者
malloc失败的时候,要么是内存耗尽了,要么是size出了问题,两种情况都没法处理,还是用assert吧

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
19 [报告]
发表于 2014-06-30 15:20 |只看该作者
你可以看下postgresql内存是怎么管理的。
它实现了一套叫 MemoryContext 的东西,小于8k的直接缓存在Context 上,大于8k的直接从os申请,用完free掉
通过这个 MemoryContext 机制申请的内存,可以不用判断返回的指针是否是NULL,因为是 NULL 时,直接通过异常处理机制 siglongjmp 跳转到别的地方进行异常处理了。
但如果你直接用 malloc/free 时还是要判断的
宁可让程序抛 error,也不能 crash,对不?

回复 1# Dannysd


   

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
20 [报告]
发表于 2014-06-30 15:26 |只看该作者
回复 17# hellioncu


    谢谢hellioncu回复

    明白了,还是要检查的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP