"Little Useful Bits Heap" Library
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 uses the heap component to control system memory and hence provides all the features available within that memory manager. (including leak detection)
Replaces the memPartLib.o, memLib.o and memShow.o found in the libos.a library archive.
calloc, cfree, memFindMax, memInit, memLibInit, memOptionsSet, memPartFindMax, memPartOptionsSet, memPartRealloc, memalign, realloc, valloc
free, malloc, memAddToPool, memPartAddToPool, memPartAlignedAlloc, memPartAlloc, memPartBlockIsValid, memPartCreate, memPartFree, memPartInit, memPartLibInit
memShow, memPartInfoGet, memParShow
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.
calloc, cfree, free, malloc, memalign, realloc, valloc
Running the unittests with this library provides the following comparisons on some test machines:
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
|
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
|
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 0 milliseconds
200 in 0 milliseconds
300 in 0 milliseconds
400 in 0 milliseconds
500 in 0 milliseconds
1000 in 0 milliseconds
2000 in 0 milliseconds
3000 in 16 milliseconds
4000 in 15 milliseconds
5000 in 16 milliseconds
10000 in 31 milliseconds
15000 in 47 milliseconds
20000 in 63 milliseconds
25000 in 93 milliseconds
30000 in 125 milliseconds
35000 in 204 milliseconds
40000 in 203 milliseconds
45000 in 218 milliseconds
50000 in 266 milliseconds
60000 in 328 milliseconds
70000 in 360 milliseconds
80000 in 406 milliseconds
90000 in 500 milliseconds
100000 in 515 milliseconds
|
100 in 0 milliseconds
200 in 0 milliseconds
300 in 0 milliseconds
400 in 0 milliseconds
500 in 15 milliseconds
1000 in 0 milliseconds
2000 in 16 milliseconds
3000 in 31 milliseconds
4000 in 31 milliseconds
5000 in 47 milliseconds
10000 in 94 milliseconds
15000 in 156 milliseconds
20000 in 188 milliseconds
25000 in 250 milliseconds
30000 in 281 milliseconds
35000 in 375 milliseconds
40000 in 375 milliseconds
45000 in 453 milliseconds
50000 in 484 milliseconds
60000 in 625 milliseconds
70000 in 672 milliseconds
80000 in 813 milliseconds
90000 in 875 milliseconds
100000 in 984 milliseconds
|