免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4611 | 回复: 11
打印 上一主题 下一主题

内核源码里的指针,都不做判空处理?这是为什么呢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-18 15:48 |只看该作者 |倒序浏览
本帖最后由 lzalinux 于 2011-05-18 15:55 编辑

好多内核源码里的指针 在分配空间后 空间是否分配成功都不处理

  函数的入参中的指针也都不做判断

难道 就是因为是内核代码 可以完全保证指针没有问题  或是为了提供效率

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
2 [报告]
发表于 2011-05-18 16:41 |只看该作者
一般申請了內存都會判斷吧,我都沒看到過不判斷的。。

论坛徽章:
0
3 [报告]
发表于 2011-05-18 18:02 |只看该作者
谢谢你的回复 ,刚看了新分配的内存是都判空了

函数的入参为什么就不需要判断呢? 难道是要求调用者自己保障么?

static inline void __list_add(struct list_head *new,
                              struct list_head *prev,
                              struct list_head *next)
{
        next->prev = new;
        new->next = next;
        new->prev = prev;
        prev->next = new;
}


另, 代码里有些变量在声明的同时又的初始化, 有的没初始化。 是什么原因呢?

论坛徽章:
0
4 [报告]
发表于 2011-05-18 18:14 |只看该作者
回复 3# lzalinux


    指针一般都会初始化的,参数如果来自用户空间也会检验的。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
5 [报告]
发表于 2011-05-18 18:50 |只看该作者
本帖最后由 Godbach 于 2011-05-18 18:51 编辑
函数的入参为什么就不需要判断呢? 难道是要求调用者自己保障么?

调用者判断,或者接口判断,这是不同的策略。

个人觉得,最好不要把太多参数合法性的检查工作都交给接口。

人家接口都提供给你了,你要提供非法的参数进去。出了错,就不要怪接口了。

论坛徽章:
0
6 [报告]
发表于 2011-05-18 19:08 |只看该作者
回复 5# Godbach


    不同的程序不同的策略,如果是UI的程序,必须得检验用户的输入,这样才不容易造成程序的崩溃。
   如果是模块内部函数,少一些检验是可以的。

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
7 [报告]
发表于 2011-05-18 19:26 |只看该作者
回复 3# lzalinux


    这个插入链表也判断那就太。。。 这个操作这么频繁,消耗不起阿。  如果数据是从用户空间传来的,就一定会判断

论坛徽章:
0
8 [报告]
发表于 2011-05-19 10:04 |只看该作者
本帖最后由 lzalinux 于 2011-05-19 10:06 编辑

谢谢各位,根据大家的意思,我总结下。

1,内存分配后,一定要判断是否分配成功。

2,函数入参的有效性检查呢,有的函数会去检查其有效性, 有的就需要函数的调用者来保障。
   这是策略不同,使用哪种方式要看具体需求和使用场景。
(1) UI相关的模块或你的接口是供不同水平的开发人员调用的,就要在接口函数里去检查参数的有效性。
(2) 如果你的接口是供自己模块或已与别的模块开发人员达成共识的,可以由调用者保掌参数的有效性。
(3) 考虑到性能问题。如果接口使用比较频繁,则为了精简代码,参数需调用者来保证。

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
9 [报告]
发表于 2011-05-19 10:39 |只看该作者
内核是相信自己的,除了从用户空间传来的参数,基本都不会检查参数有效性。

论坛徽章:
0
10 [报告]
发表于 2011-05-23 15:23 |只看该作者
除了armrant说的信任外,应该还有效率的考虑
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP