From 359b4f2885cbca41c5833be2a50fe9c00daf6dca Mon Sep 17 00:00:00 2001 From: Rene Rivera Date: Thu, 31 Dec 2020 08:38:31 -0600 Subject: [PATCH] Minor clean up list cache code. --- src/engine/lists.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/engine/lists.cpp b/src/engine/lists.cpp index d646c6e22..ca880267d 100644 --- a/src/engine/lists.cpp +++ b/src/engine/lists.cpp @@ -14,44 +14,47 @@ #include -static LIST * freelist[ 32 ]; /* junkpile for list_dealloc() */ +static const size_t freelist_size = 16; -static int32_t get_bucket( int32_t size ) +static LIST * freelist[ freelist_size ]; /* junkpile for list_dealloc() */ + +static int32_t get_bucket_size( size_t bucket ) { - int32_t bucket = 0; - while ( size > ( int32_t(1) << bucket ) ) ++bucket; + return int32_t(1) << ( bucket < freelist_size ? bucket : ( freelist_size - 1 ) ); +} + +static size_t get_bucket( int32_t size ) +{ + size_t bucket = 0; + while ( ( bucket < freelist_size ) && ( size > get_bucket_size( bucket ) ) ) ++bucket; return bucket; } static LIST * list_alloc( int32_t size ) { - int32_t bucket = get_bucket( size ); + size_t bucket = get_bucket( size ); if ( freelist[ bucket ] ) { LIST * result = freelist[ bucket ]; freelist[ bucket ] = result->impl.next; return result; } - return (LIST *)BJAM_MALLOC( sizeof( LIST ) + ( size_t( 1 ) << bucket ) * + return (LIST *)BJAM_MALLOC( sizeof( LIST ) + get_bucket_size( bucket ) * sizeof( OBJECT * ) ); } static void list_dealloc( LIST * l ) { int32_t size = list_length( l ); - int32_t bucket; + size_t bucket; LIST * node = l; if ( size == 0 ) return; bucket = get_bucket( size );; -#ifdef BJAM_NO_MEM_CACHE - BJAM_FREE( node ); -#else node->impl.next = freelist[ bucket ]; freelist[ bucket ] = node; -#endif } /* @@ -70,7 +73,7 @@ LIST * list_append( LIST * l, LIST * nl ) int32_t bucket = get_bucket( size ); /* Do we need to reallocate? */ - if ( l_size <= ( int32_t(1) << ( bucket - 1 ) ) ) + if ( l_size <= get_bucket_size( bucket ) ) { LIST * result = list_alloc( size ); memcpy( list_begin( result ), list_begin( l ), l_size * sizeof(