sys/queue.h
首次出现在4.4BSD中。 Linux已将其包含在其发行版中,但该版本似乎不是最新的。
FreeBSD version实现单链接列表,单链接尾部队列,列表和尾部队列。 Linux version实现了列表,尾部队列和循环队列。
我在我的Ubuntu PC中安装了libbsd-dev软件包,然后在sys/queue.h
中找到了BSD版本/usr/include/bsd/sys/queue.h
。
我的问题:
我在哪里可以找到此头文件的 Linux 版本?
这两种实现之间的主要区别是什么? Linux 版本只是 BSD 的过时版本?
答案 0 :(得分:1)
他们拥有相同的祖先,但看起来很久以前他们所做的任何发展都有分歧。
如果您想在项目中使用它,最好的办法就是将您最喜欢的那个复制到项目中并使用它。不要依赖为您提供的系统。它只是一个带有一堆宏的头文件,不需要库或任何依赖项工作,因此根本不是特定于操作系统的。我通常从OpenBSD中选择一个用于我的项目。
答案 1 :(得分:0)
看起来Linux的版本已经过时了。自2001年以来,CIRCLEQ(相当强烈地)在BSD中被弃用,甚至从文档中删除,即使实现仍在queue.h中。我们应该使用TAILQ,它提供相同的功能,具有更好的性能/更少的问题/更健全的实现。
与此同时,在Linux中,它甚至还有文档记录,但你可以发现kconfig从CIRCLEQ迁移到TAILQ的变化引用BSD弃用。
CIRCLEQ中的具体问题似乎是它使用了一个特定的头,与列表节点不同,但无论如何都链接为一个节点;因此必须保持头部指针并在每个节点访问时检查以查看该节点是否为头部。因此存在两个问题:每次访问时的检查,以及需要将头指针放在手边,进行寄存器或缓存。