C语言(顶级黑客的c程序)

作为世界最牛逼黑客之一,Linus Torvalds的特立独行就跟他的软件Linux一样受人瞩目,那你想知道Linux的创始人Linus Torvalds是怎么写C语言程序的吗?一起来感受下。

一个对程序吹毛求疵到无以复加的家伙,一个纯粹的代码洁癖重度患者,一个极度自恋狂,一个极不喜欢UI界面而追求极致命令操作的理想主义者。这些都是Torvalds身上的标签。

但不管你贴多少标签,在这些褒义贬义的形容词背后,是一个真真切切对编程有偏执的狂人。这位神一般的开源先驱是怎么写代码的呢?对我们C语言初学者而言,更有趣的问题是,他是怎么写if……else的呢??何必那么多废话,直接看一段他在Ted中的演讲视频。

视频内容

从1分53秒开始,中间是一段很有意思的内容。主持人说Torvalds对编程是一个非常有“品味”的人,这个品味是什么? 他拉出了一段代码。look:

这是几行多么循规蹈矩的代码呀!99.999%的人在写链表操作的时候都是这么写的。我们定义了walk和prev等临时变量,用来遍历链表,通过一个while循环来找到想要删除的节点entry,然后根据prev是否为NULL(即判断要删除的节点是否就是第一个节点)来决定不同的操作。

这是一段描述链表操作的入门级的非常简单的代码,咱们不用去关心这代码的功能,只需关注一下用红色框框括起来的 if ... else 语句。

听Torvalds是怎么说的:这不是一段很好的代码,但却几乎是所有刚开始学习编程和使用链表的人会学习的普遍的方法。这段代码中最后使用了一个 if ... else 语句,这表示该段代码需要处理某些特殊的情况,于是就出现了两路分支

我穿插一句补充,由于代码出现了分支,于是不管两路分支出现的概率如何,程序永远不可能同时走两路,因此代码的利用率就被降低了,就像修了两条路,但是你永远只能走一条。最糟糕的情况是,利用率只有50%。当然关于两路分支的概率的话题,有机会再来探讨内核中的 likely 和 unlikely 的详细内幕。

Torvalds 接着说,其实我们可以这么写程序:

瞧,分支语句没了! 程序好像永远只处理一种普适的情况,这就是完美的有品位的代码。

提示一下,上面的indirect是一个二级指针,指向链表中的指针。这种设计不仅避免了多临时变量,还省略的很多分支语句,并且这个设计方法被 Torvalds 运用在内核哈希链表之中,还能节省哈希表50%的空间消耗!

在内核中,Torvalds 的代码永远是那么光芒璀璨,引人入胜!墙裂建议C语言学的差不多的同学走入Linux的世界,阅读一下世界顶级黑客大牛是怎么写程序的

原文发布于微信公众号 - 秘籍酷(mijiku040)

原文发表时间:2019-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券