On Monday 24 September 2001 09:22 pm, Brian Pane wrote: > Cliff Woolley wrote: > >I'm trying to decide whether apr_bucket_alloc should take a length > >parameter or not. If it takes a length parameter, it can allocate in a > >few different increments (say 16B, 32B, 64B, 128B), but of course it will > >have to have separate free lists for each thread for each size. That > >would allow it to allocate space for the apr_bucket_(heap|pool|file|mmap) > >private structures with the same system that allocates for the > >apr_bucket's. Or it can just use a single size (64B should be sufficient > >for all current bucket types), and if sizeof(apr_bucket_foo)>64, it will > >fail. But that seems pointless to me because we're testing at runtime a > >condition that's known at compile time [it may or may not be able to be > >compiled away depending on whether apr_bucket_alloc gets inlined or not]. > >But at least if we test it we can avoid situations where maybe a structure > >is 40B on a 32bit system but blows up to 72B on a 64bit system. If it > >weren't for that possibility, I'd just say we should leave it up to the > >developer to ensure his structure is within the allowed size and not check > >it explicitly, so we could just leave off the size parameter. So we'd end > >up with one free list, all blocks allocated would be the same size. > >That's clearly the absolute fastest way to allocate these things. Is it > >safe? > > Is it always going to be true that all the bucket subclasses are declared > in apr_buckets.h? If so, how about doing something like this: > > union bucket_size { > struct apr_bucket t1; > struct apr_bucket_heap t2; > struct apr_bucket_pool t3; > /* rest of the bucket types omitted for clarity... */ > }; > > and using sizeof(union bucket_size) as the single block size for the > free list?
It is not true that all bucket types are declared in apr_buckets. It is perfectly possible for a module writer to create their own bucket type. In fact, httpd does this for HTTP error codes. I haven't digested the original question yet, but I wanted to answer this. I'll answer the original in about an hour. I am doing work-work right now. Ryan ______________________________________________________________ Ryan Bloom [EMAIL PROTECTED] Covalent Technologies [EMAIL PROTECTED] --------------------------------------------------------------