内核源码里的指针,都不做判空处理?这是为什么呢

发布于 2022-10-15 06:40:02 字数 206 浏览 32 评论 0

本帖最后由 lzalinux 于 2011-05-18 15:55 编辑

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

两仪 2022-10-22 06:40:02

一般申請了內存都會判斷吧,我都沒看到過不判斷的。。

郁金香雨 2022-10-22 06:40: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;
}

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

最后的乘客 2022-10-22 06:40:02

回复 3# lzalinux

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

很酷又爱笑 2022-10-22 06:40:02

本帖最后由 Godbach 于 2011-05-18 18:51 编辑

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

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

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

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

自由如风 2022-10-22 06:40:02

回复 5# Godbach

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

枕花眠 2022-10-22 06:40:02

回复 3# lzalinux

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

软糯酥胸 2022-10-22 06:40:02

本帖最后由 lzalinux 于 2011-05-19 10:06 编辑

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

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

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

思念绕指尖 2022-10-22 06:40:02

内核是相信自己的,除了从用户空间传来的参数,基本都不会检查参数有效性。

流星番茄 2022-10-22 06:40:02

除了armrant说的信任外,应该还有效率的考虑

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文