Changeset 2783 for trunk


Ignore:
Timestamp:
Aug 27, 2006, 9:45:16 AM (19 years ago)
Author:
bird
Message:

Heap performance.

Location:
trunk/libc
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/libc/include/emx/umalloc.h

    r2312 r2783  
    717717void _um_default_release (Heap_t, void *, size_t);
    718718void _um_default_shrink (Heap_t, void *, size_t, size_t *);
    719 int _um_find_bucket (size_t);
    720719void _um_free_maybe_lock (void *, int);
    721720Heap_t _um_init_default_regular_heap (void);
     
    733732void _um_lump_unlink_heap (Heap_t, struct _um_lump *);
    734733int _um_walk_no_lock (Heap_t, _um_callback2 *, void *);
     734void _um_abort (const char *, ...)  __attribute__((__noreturn__));
    735735
    736736
     
    808808
    809809
    810 void _um_abort (const char *, ...)  __attribute__((__noreturn__));
     810static inline int _um_find_bucket (size_t rsize)
     811{
     812  int bucket = __fls (rsize) - 1 - _UM_MIN_BUCKET;
     813  if (bucket < 0)
     814    bucket = 0;
     815  else if (bucket >= _UM_BUCKETS)
     816    return _UM_BUCKETS - 1;
     817#if defined(__LIBC_STRICT) || defined(DEBUG)
     818  if (   _UM_BUCKET_SIZE (bucket) > rsize
     819      || _UM_BUCKET_SIZE (bucket+1) <= rsize)
     820    _um_abort ("_um_find_bucked: rsize=%x\n", rsize);
     821#endif
     822  return bucket;
     823}
     824
    811825
    812826#if defined (__cplusplus)
  • trunk/libc/src/libc/libc.def

    r2712 r2783  
    11231123    "__um_default_release" @1136
    11241124    "__um_default_shrink" @1137
    1125     "__um_find_bucket" @1138
     1125    "__um_find_bucket" = "___nullstub_function" @1138
    11261126    "__um_free_maybe_lock" @1139
    11271127    "__um_init_default_regular_heap" @1140
  • trunk/libc/src/libc/malloc/imisc.c

    r2205 r2783  
    99#include <sys/fmutex.h>
    1010#include <emx/umalloc.h>
    11 
    12 /* Leave FLS undefined if __fls() is not available.  __fls() is
    13    similar to ffs(), but finds the last (most significant) bit. */
    14 
    15 #define FLS(x)          __fls(x)
    16 
    17 
    18 int _um_find_bucket (size_t rsize)
    19 {
    20   int bucket;
    21 
    22 #ifdef FLS
    23   bucket = FLS (rsize) - 1 - _UM_MIN_BUCKET;
    24   if (bucket < 0)
    25     bucket = 0;
    26   else if (bucket >= _UM_BUCKETS)
    27     return _UM_BUCKETS - 1;
    28   assert (_UM_BUCKET_SIZE (bucket) <= rsize);
    29   assert (_UM_BUCKET_SIZE (bucket+1) > rsize);
    30   return bucket;
    31 #else
    32   for (bucket = _UM_BUCKETS - 1; bucket >= 0; --bucket)
    33     if (_UM_BUCKET_SIZE (bucket) <= rsize)
    34       return bucket;
    35   _um_abort ("_um_find_bucked: rsize=%x\n", rsize); /* RSIZE is probably not rounded! */
    36 #endif
    37 }
    3811
    3912
Note: See TracChangeset for help on using the changeset viewer.