[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Trampolines



At 5:37 PM -0400 5/12/03, Mike Newhall wrote:
>	Now that I think of it thread local storage could easily be 
>simulated by passing the pointer to the shared resource down the 
>call chain as an extra parameter.  The first guy that gets a null 
>pointer knows it's his responsibility to allocate it, then he passes 
>it in any call to a client who needs it.  Sounds like a job for an 
>object.

This does have some performance impact associated with it, which you 
do need to be careful of. (Well, if you care :) Passing an extra 
parameter has a non-zero cost associated with it, and the smaller 
your functions/methods/subs are the higher that cost climbs relative 
to the execution time of the actual code. Checking for a null value 
on every use is also potentially non-trivial, as it means a test and 
branch set, generally flushing your CPU's pipeline. Also not 
necessarily a huge cost, but once again it can add up pretty quickly.

This is one of the reasons for thread-local storage in the first 
place--that's generally stuck someplace where the OS/CPU/MMU 
(depending on your CPU architecture and OS) can cheat wildly for 
performance reasons, generally in ways that user code can't. Carrying 
around thread-local storage generally has no cost (though using it 
can have a significantly non-zero cost in some cases) so you're best 
using it for not-too-frequently-used data.
-- 
                                         Dan

--------------------------------------"it's like this"-------------------
Dan Sugalski                          even samurai
dan@sidhe.org                         have teddy bears and even
                                       teddy bears get drunk