<sys/queue.h> bikeshed proposal

Robert Watson rwatson at FreeBSD.org
Fri Mar 16 11:42:27 UTC 2007


On Thu, 15 Mar 2007, Bakul Shah wrote:

>> On Tue, Mar 13, 2007 at 09:38:05AM +0000, Poul-Henning Kamp wrote:
>>> In message <39968.1173776514 at critter.freebsd.dk>, Poul-Henning Kamp writes:
>>>>
>>>> It has always bothered me that some of the TAILQ macros need to
>>>> know the struct name of the header type.
>>
>> Yeah, <sys/queue.h> can present a challenge in understanding an 
>> implementation of basic data structures and related algos. :-) You thought 
>> that tqe_prev points to the whole entry structure when making the patch, 
>> didn't you?
>>
>> Personally, I cannot explain to myself why in the double-linked structs the 
>> prev member points to the next member in the previous list element and not 
>> to the previous list element itself.  Could anybody with CS education 
>> explain merits of the current approach? I can only see that now we have to 
>> go to the element before the previous one for a pointer to the latter. 
>> I'm not going to dispute the current way of things, just curious.
>
> IIRC, the main reason is so that you don't have to know the actual type of 
> other things on the list.  In particular the list head can be just a 
> next/prev ptr pair and not the entire object.  This is handy, for example, 
> when you have a list hanging off another object -- you can remove any list 
> element without detaching the entire list from the parent object. The 
> queue.h trick is quite clever and useful.  To appreciate it, try figuring 
> out a solution using Lisp style lists! IIRC, your typical CS education 
> doesn't spend much time on pragmatics.

Right now, the queue(9) man page talks a bit about the relative performance of 
the different list types.  It would be interesting to reevaluate their 
relative performance now that instructions are relatively cheaper, and memory 
access is relatively more expensive.

Robert N M Watson
Computer Laboratory
University of Cambridge


More information about the freebsd-arch mailing list