linux内核与sys/queue.h中的list实现

91 views
Skip to first unread message

duyue

unread,
Feb 2, 2011, 9:45:46 AM2/2/11
to beihang-open...@googlegroups.com
大家新年快乐呀!



10年4月的时候jesse给大家讲了linux内核中的list实现以及那神奇的指针运算来计算出成员在结构中的位置:
#define list_entry(ptr, type, member) \
((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))

0的用处多多呀, 不是吗? 这个方法很新奇不过貌似感觉有些不优雅. 最近看到sys/queue.h, 里面也实现了list数据结构(还有tail queue等其他数据结构). 不用复杂的指针运算就能取到成员啦.

man 3 queue 查看手册, 其实源码也挺简单的.
ttp://lists.freebsd.org/pipermail/freebsd-arch/2007-March/006120.html 讨论到了为什么要这样实现.


其实一些基本的数据结构是经常用到的, google generic library就可以找到很多. 推荐一下sglib.

duyue

unread,
Feb 2, 2011, 9:55:51 AM2/2/11
to duyue, beihang-open...@googlegroups.com
jesse讲的slides可以在这里下载 http://code.google.com/p/bhosc/wiki/meeting_2010_04_16
sys/queue.h来自freebsd

myrice

unread,
Feb 3, 2011, 1:24:36 AM2/3/11
to 北航开源软件俱乐部
辛苦啊。。。这时候还在搞技术。。
看了generic library,有时间演示下sglib?嘿嘿

Jesse Zhang

unread,
Feb 3, 2011, 2:50:12 AM2/3/11
to beihang-open...@googlegroups.com
2011/2/3 myrice <qql...@gmail.com>:
> 辛苦啊。。。这时候还在搞技术。。

人这叫自得其乐。

> 看了generic library,有时间演示下sglib?嘿嘿

真是独乐乐不如众乐乐啊。

jesse

Grissiom

unread,
Feb 3, 2011, 3:17:05 AM2/3/11
to beihang-open...@googlegroups.com
2011/2/3 Jesse Zhang <zh.j...@gmail.com>:

> 2011/2/3 myrice <qql...@gmail.com>:
>> 辛苦啊。。。这时候还在搞技术。。
>
> 人这叫自得其乐。
>

抱着手册看的人感觉泪流满面啊……

>> 看了generic library,有时间演示下sglib?嘿嘿
>
> 真是独乐乐不如众乐乐啊。
>

期待期待~;)

咱们这里有没有对嵌入式比较熟悉的?个人最近对嵌入式里的C库(uClibc, newlib之类的)比较感兴趣~
前段时间要自写一个 strcpy 的函数,想起小月月以前讲的了,顿感书到用时方恨少啊……

P.S. 貌似有点歪楼……

--
Cheers,
Grissiom

duyue

unread,
Feb 3, 2011, 5:42:53 AM2/3/11
to beihang-open...@googlegroups.com
On Thu, 3 Feb 2011 16:17:05 +0800
Grissiom <chaos....@gmail.com> wrote:

> 咱们这里有没有对嵌入式比较熟悉的?个人最近对嵌入式里的C库(uClibc, newlib之类的)比较感兴趣~
> 前段时间要自写一个 strcpy 的函数,想起小月月以前讲的了,顿感书到用时方恨少啊……

对嵌入式没有了解... 不过网上有对不同版本strcpy的测试, 字符串长度不会太长的话, 逐字符比较的性能也不错的.


Reply all
Reply to author
Forward
0 new messages