摘要:Linus Torvalds坦言那些狡诈的通过文件名查找高速缓存,然后又抱怨自己能力一般的内核“恶魔”才是他欣赏的;相反,很多人连低水平的内核编程都还没学好。
几周前, Linus Torvalds在Slashdot上回答了一些问题。其中有一条引发了开发者们的强烈关注,当被问到他心目中的内核黑客时,他说自己这些日子已经不怎么看代码了,除非是帮别人审查。他稍微暂停了一下,坦言那些“狡猾”的通过文件名查找高速缓存又抱怨自己能力一般的内核“恶魔”(黑客)才是他欣赏的。
他说:
相反,很多人连低水平的内核编程都还没学好。像lockless用名字查找(name lookup)功能即使不大也不复杂,却是指针到指针的一个简单及良好的使用方法。比如,我曾看见过许多人通过跟踪上一页条目删除一个单向链接的列表项,然后删除该条目。例如:
- if(prev)
- prev->next=entry->next;
- else
- list_head=entry->next;
每当我看到这些的代码,我会说:“此人不了解指针”。这还是一个可悲的、常见的问题。
如果开发者能够理解指针,只需要使用“指向该条目的指针”并初始化list_head,然后贯穿列表,此时无需使用任何条件语句即可删除该条目,只需通过 *pp = entry->next。
我想我理解指针,但不幸的是,如果要实现删除函数,我会一直保持跟踪前面的列表节点。这里是代码草稿:
不理解指针的人做法:
- typedefstructnode
- {
- structnode*next;
- ....
- }node;
- typedefbool(*remove_fn)(nodeconst*v);
- //Removeallnodesfromthesuppliedlistforwhichthe
- //suppliedremovefunctionreturnstrue.
- //Returnsthenewheadofthelist.
- node*remove_if(node*head,remove_fnrm)
- {
- for(node*prev=NULL,*curr=head;curr!=NULL;)
- {
- node*next=curr->next;
- if(rm(curr))
- {
- if(prev)
- prev->next=curr->next;
- else
- head=curr->next;
- free(curr);
- }
- else
- prev=curr;
- curr=next;
- }
- returnhead;
- }
这个链表很简单,但可以把每个节点的指针和sentinel值构建成了一个完美的结构体,但是修改这个表的代码需要很精妙。难怪链表功能会常出现在许多面试环节中。
上面执行的代码是处理从列表头中删除任何节点所需的条件。
现在,让我们好好记住Linus Torvalds执行代码。在这种情况下,我们通过一个指针指向列表头来贯穿列表遍历修改。
Two star programming:
- voidremove_if(node**head,remove_fnrm)
- {
- for(node**curr=head;*curr;)
- {
- node*entry=*curr;
- if(rm(entry))
- {
- *curr=entry->next;
- free(entry);
- }
- else
- curr=&entry->next;
- }
- }
好多了!最关键的部分在于:链表中的链接都是指针,因此指针到指针是修改链表的首选方案。
改进版的remove_if()是一个使用双重星号的例子,双重星号象征着两重间接寻址,再加一个星(third star)又会太过多余。
英文出自:Wordaligned
分享到:
相关推荐
linus torvalds 的自传体的一本书, 每一个linux的爱好者都应该好好看看
Linus torvalds本人念[Linux]的发音,包括英语和瑞典语。
Just for Fun-Linus Torvalds 自传
Just for Fun by Linus Torvalds & David Diamond Audiobook 1 of 5
这本ust For Fun by Linus Torvalds的书是linux的创始人linus 他为自己写的,当然还有他的朋友也在帮写了这本书,书名是英文的,便内容是汉语,想了解linus的人可以看一下,可下在手机上看的。.txt格式。。
《Just for Fun》是托瓦兹唯一的一本自传,全书充斥著托瓦兹独特的幽默感,以及「托瓦兹式」的思考逻辑与对话,让人不禁惊叹,一个不时置身於镁光灯下与金钱洪流中 的平凡名人,为何还能如此单纯率真。经由记者大卫...
Linux操作系统的创始人Linus Torvalds的自传,中文版
Linus Torvalds Just For Fun
只是为了好玩-Linus Torvalds 自传
Linux最原始版本的源代码,有兴趣做开源、有兴趣研究操作系统的一定要看看。
THE POWER OF OPEN SOURCE
Linux的缔造者Linus Torvalds.pdf
Just for Fun - Linus Torvalds 自传.pdf
我对生命的意义有种理论。我们可以在第一章里对人们解释生命的意义何在。这样可以吸引他们。一旦他们被吸引住,并且付钱买了书,剩下的章节里我们就可以胡扯了。 —— Linus Torvalds
Linux Linux最早是Linus Torvalds在1991...”甚至连Unix之父Dennis Ritchie也认为Linux“确实不错”。有一些分析家甚至认为,在未来数年间,Linux将成为NT真正强有对手,也是唯一可以冲破微软垄断性文化圈的出路所在。
Linux操作系统创始人Linus Torvalds的自传,中文CHM版。
Git是我们在很久以前就开始使用的一门技术,可以巴萨自己做的代码挂到上面,那样防止代码的丢失,还可以给别人参考使用!一举两得
今年45岁的芬兰人Linus Torvalds是Linux操作系统的创始人。他于1991年创建的Linux操作系统,不断获得互联网上众多自愿者“程序员”的支持,经过十几年的发展,如今已经成为云时代数据中心的首选操作系统!
Linux最早由Linus Torvalds在1991年开始编写。 在这之前,Richard Stallman创建了Free Software Foundation(FSF)组织以及GNU项目, 并不断的编写创建GNU程序(程序的许可方式均为GPL:General PublicLicense)。在...
可以放在kindle里面看,比pdf阅读应该方便的了许多,而且size很小