From: Gavin Collings (gcollings_at_[hidden])
Date: 2000-02-07 10:52:15
> No specific destruction order is necessary to pass around the
> The message itself is not used until there is only one node on the
> list. So the actual node that carries it is unimportant (the circular
> list helps here). Along as one node knows the message, it is not
> If a node is leaving the list and has the message, it passes it on to
> its neighbor. The direction is irrelevant. It is true that in some
> circumstances, the message might need to be passed to evey node on the
> list, but each of these operations would be constant time. This lazy
> evaluation allows all operations to be limited to O(1).
Ah yes, quite neat. I haven't properly explored using the list as a
notification mechanism, this looks like a good application of it,
though. Shall we split the difference and say N/2 on average then ;)
I'm still a little hesitant about leaving all those potentially
dangling references around, though.
> Do you have struct alignment settings leftover from some previous
> project? MSVC's default is 8 byte alignment.
Here's what MSDN says: -
char Align on byte boundaries
short (16-bit) Align on even byte boundaries
int and long (32-bit) Align on 32-bit boundaries
float Align on 32-bit boundaries
double Align on 64-bit boundaries
structures Largest alignment requirement of any member
unions Alignment requirement of the first member
The largest alignment requirement of any member is 4 bytes (pointer).
The 8 bytes you're talking of is the maximum amount of padding that
will be inserted to bring about this alignment (/Zp option). That is
set to 8 bytes in my VC project, I still get a 12 byte linked_ptr
though - apparently no padding is necessary.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk