"Little Useful Bits Heap" Library

Overview

This library can be linked with executables to override the standard memory management provided by the system libraries. This may provide a performance and debugging advantage.

The implementation used the heap component to control system memory and hence provides all the features available within that memory manager. (including leak detection)

VxWorks

Replaces the memPartLib.o, memLib.o and memShow.o found in the libos.a library archive.

memLib.o functions

calloc, cfree, memFindMax, memInit, memLibInit, memOptionsSet, memPartFindMax, memPartOptionsSet, memPartRealloc, memalign, realloc, valloc

memPartLib.o functions

free, malloc, memAddToPool, memPartAddToPool, memPartAlignedAlloc, memPartAlloc, memPartBlockIsValid, memPartCreate, memPartFree, memPartInit, memPartLibInit

memShow.o functions

memShow, memShow, memPartInfoGet, memParShow

POSIX

Replaces the dynamic memory functionality found in the libc.a library archive.

This implementation relies on the sbrk() function to provide memory chunks to feed the standard heap.

Functions

calloc, cfree, free, malloc, memalign, realloc, valloc

Performance

Running the unittests with this library provides the following comparisons on some test machines:

x86_64-unknown-linux-gnu

Native memory management (./test/mallocTest) lubheap memory management (./test/lubMallocTest)
    100 in          0 milliseconds
    200 in          0 milliseconds
    300 in          0 milliseconds
    400 in          0 milliseconds
    500 in          1 milliseconds
   1000 in          3 milliseconds
   2000 in          7 milliseconds
   3000 in         12 milliseconds
   4000 in         16 milliseconds
   5000 in         21 milliseconds
  10000 in         48 milliseconds
  15000 in         79 milliseconds
  20000 in        143 milliseconds
  25000 in        200 milliseconds
  30000 in        253 milliseconds
  35000 in        314 milliseconds
  40000 in        378 milliseconds
  45000 in        460 milliseconds
  50000 in        561 milliseconds
  60000 in        790 milliseconds
  70000 in       1036 milliseconds
  80000 in       1320 milliseconds
  90000 in       1653 milliseconds
 100000 in       2037 milliseconds
    100 in          0 milliseconds
    200 in          0 milliseconds
    300 in          0 milliseconds
    400 in          1 milliseconds
    500 in          1 milliseconds
   1000 in          3 milliseconds
   2000 in          6 milliseconds
   3000 in          9 milliseconds
   4000 in         11 milliseconds
   5000 in         13 milliseconds
  10000 in         37 milliseconds
  15000 in         49 milliseconds
  20000 in         61 milliseconds
  25000 in         75 milliseconds
  30000 in         89 milliseconds
  35000 in         99 milliseconds
  40000 in        113 milliseconds
  45000 in        125 milliseconds
  50000 in        138 milliseconds
  60000 in        177 milliseconds
  70000 in        203 milliseconds
  80000 in        228 milliseconds
  90000 in        254 milliseconds
 100000 in        277 milliseconds

i686-pc-linux-gnu

Native memory management (./test/mallocTest) lubheap memory management (./test/lubMallocTest)
    100 in          0 milliseconds
    200 in          0 milliseconds
    300 in          0 milliseconds
    400 in          1 milliseconds
    500 in          1 milliseconds
   1000 in          3 milliseconds
   2000 in          7 milliseconds
   3000 in         12 milliseconds
   4000 in         16 milliseconds
   5000 in         21 milliseconds
  10000 in         46 milliseconds
  15000 in         76 milliseconds
  20000 in        111 milliseconds
  25000 in        151 milliseconds
  30000 in        199 milliseconds
  35000 in        256 milliseconds
  40000 in        318 milliseconds
  45000 in        393 milliseconds
  50000 in        472 milliseconds
  60000 in        658 milliseconds
  70000 in        874 milliseconds
  80000 in       1121 milliseconds
  90000 in       1411 milliseconds
 100000 in       1745 milliseconds
    100 in          0 milliseconds
    200 in          0 milliseconds
    300 in          1 milliseconds
    400 in          1 milliseconds
    500 in          1 milliseconds
   1000 in          4 milliseconds
   2000 in          7 milliseconds
   3000 in         11 milliseconds
   4000 in         13 milliseconds
   5000 in         15 milliseconds
  10000 in         42 milliseconds
  15000 in         57 milliseconds
  20000 in         72 milliseconds
  25000 in         89 milliseconds
  30000 in        105 milliseconds
  35000 in        121 milliseconds
  40000 in        136 milliseconds
  45000 in        154 milliseconds
  50000 in        169 milliseconds
  60000 in        213 milliseconds
  70000 in        246 milliseconds
  80000 in        278 milliseconds
  90000 in        311 milliseconds
 100000 in        341 milliseconds

i686-pc-cygwin

For some reason the native memory management under cygwin is quicker. My suspcion is that there is an overhead in the sbrk() call via the cygwin sub-system which slows the lubheap implementation...
Native memory management (./test/mallocTest) lubheap memory management (./test/lubMallocTest)
    100 in          1 milliseconds
    200 in          0 milliseconds
    300 in          1 milliseconds
    400 in          1 milliseconds
    500 in          1 milliseconds
   1000 in          2 milliseconds
   2000 in          6 milliseconds
   3000 in         10 milliseconds
   4000 in         12 milliseconds
   5000 in         15 milliseconds
  10000 in         33 milliseconds
  15000 in         54 milliseconds
  20000 in        137 milliseconds
  25000 in        174 milliseconds
  30000 in        227 milliseconds
  35000 in        230 milliseconds
  40000 in        245 milliseconds
  45000 in        273 milliseconds
  50000 in        327 milliseconds
  60000 in        356 milliseconds
  70000 in        406 milliseconds
  80000 in        484 milliseconds
  90000 in        504 milliseconds
 100000 in        575 milliseconds
    100 in          1 milliseconds
    200 in          2 milliseconds
    300 in          3 milliseconds
    400 in          3 milliseconds
    500 in          4 milliseconds
   1000 in         10 milliseconds
   2000 in         18 milliseconds
   3000 in         28 milliseconds
   4000 in         35 milliseconds
   5000 in         80 milliseconds
  10000 in        135 milliseconds
  15000 in        171 milliseconds
  20000 in        204 milliseconds
  25000 in        264 milliseconds
  30000 in        302 milliseconds
  35000 in        379 milliseconds
  40000 in        408 milliseconds
  45000 in        532 milliseconds
  50000 in        496 milliseconds
  60000 in        639 milliseconds
  70000 in        750 milliseconds
  80000 in        812 milliseconds
  90000 in        931 milliseconds
 100000 in       1054 milliseconds

Generated on Fri Oct 13 15:52:04 2006 for CLISH by  doxygen 1.4.6