摘要: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
分享到:
相关推荐
综上所述,这个压缩包文件提供了一个难得的机会,让人们直接听到Linux之父亲自发音,无论是对于想提高技术词汇发音准确性的学习者,还是对于对Linus Torvalds和Linux感兴趣的爱好者,都是极其有价值的学习材料。...
Just for Fun-Linus Torvalds 自传
《林纳斯·托瓦兹的自传》是一本深度揭示Linux之父心路历程与技术探索的书籍,对于每一个对Linux系统怀有热情的IT人士来说,它都是一份不可多得的精神食粮。这本书详细记录了林纳斯·托瓦兹如何从一个普通的计算机...
【标题】"乐者为王 - Linus Torvalds" 提到的是 Linus Torvalds,他是计算机界的标志性人物,因创建Linux操作系统内核而闻名于世。Linux 是一种自由和开放源码的操作系统,其核心由 Torvalds 在1991年撰写,至今已...
《Just for Fun》是Linux创始人林纳斯·托瓦兹(Linus Torvalds)与大卫·戴蒙德(David Diamond)合著的一本自传性质的书籍,书名本身就充满了幽默和轻松的意味,反映了林纳斯对编程和开源精神的独特见解。...
### 只是为了好玩—Linus Torvalds 自传 #### 重要知识点概览: 1. **林纳斯·托瓦兹的个人经历**:本书详细记录了Linux之父林纳斯·托瓦兹的成长历程,从童年到创建Linux操作系统,再到成为全球知名的技术领袖。 ...
Linux 0.01是Linux操作系统历史上的一个里程碑,它由Linux的创始人Linus Torvalds在1991年编写。这个早期的源代码包含了Linux操作系统的核心组件,为后来的发展奠定了基础。对于想要深入了解开源文化、操作系统原理...
**林纳斯·托瓦兹(Linus Torvalds)及其个人背景** - **作者介绍**:林纳斯·托瓦兹,著名的芬兰程序员,因创造了Linux操作系统内核而闻名于世。他出生于1969年12月28日,成长过程中受到了家庭环境的影响,特别是...
这本ust For Fun by Linus Torvalds的书是linux的创始人linus 他为自己写的,当然还有他的朋友也在帮写了这本书,书名是英文的,便内容是汉语,想了解linus的人可以看一下,可下在手机上看的。.txt格式。。
### Linus Torvalds 自传《Just for Fun》知识点总结 #### 一、关于Linus Torvalds **Linus Benedict Torvalds** 是一位著名的计算机科学家,同时也是Linux内核的创始人与主要开发者之一。他的成就不仅限于技术...
### Linus Torvalds 自传《Just for Fun》知识点概览 #### 一、书籍简介 - **书名**:《Just for Fun》 - **作者**:Linus Torvalds 和 David Diamond - **主要内容**:本书是 Linux 之父 Linus Torvalds 的个人...
Git是一个分布式版本控制系统,最初由Linux的创始人Linus Torvalds编写。它最初设计用于管理Linux内核的源代码,但现在已经广泛应用于各种软件开发项目中。Git的设计思想是让软件开发者在本地执行大多数操作,如提交...
"Linux的缔造者Linus Torvalds" Linux操作系统是当前世界上最为流行的开源操作系统之一,其创始人Linus Torvalds是一名芬兰的计算机天才。Linus Torvalds出生于1970年12月28日,出生在芬兰的首都赫尔辛基。他儿时最...
Linux操作系统是由林纳斯·托瓦兹(Linus Torvalds)在1991年启动的一个项目,当时他是赫尔辛基大学的计算机科学学生。Linux的诞生源于他对Minix系统的改进,他在Minix的基础上编写了一个多任务调度的程序。随着项目...
在这篇文章中,Linus Torvalds,Linux的创始人,接受了采访,分享了他的想法和看法关于Linux 2.4的发布。 首先,Linus Torvalds认为,Linux 2.4的发布不会让Linux比Unix和Windows 2000更有竞争力。他认为,这样的...
今年45岁的芬兰人Linus Torvalds是Linux操作系统的创始人。他于1991年创建的Linux操作系统,不断获得互联网上众多自愿者“程序员”的支持,经过十几年的发展,如今已经成为云时代数据中心的首选操作系统!
在自传《Just For Fun》中,Linus Torvalds以他特有的幽默和深刻的社会观察力,不仅仅为我们讲述了一个关于操作系统Linux诞生的故事,还深入探讨了生命的意义,技术的发展,以及人类社会行为的演变。从生存到社会...
可以放在kindle里面看,比pdf阅读应该方便的了许多,而且size很小