class KZoneAllocator
|
Memory allocator for large groups of small objects. More... |
|
|
Public Methods
Protected Types
Protected Methods
Protected Members
Memory allocator for large groups of small objects.
This should be used for large groups of objects that are created and
destroyed together. When used carefully for this purpose it is faster
and more memory efficient than malloc. Additionally to a usual obstack
like allocator you can also free the objects individually. Because it
does no compaction it still is faster then malloc()/free(). Depending
on the exact usage pattern that might come at the expense of some
memory though.
KZoneAllocator (unsigned long _blockSize = 8*1024)
| KZoneAllocator |
Creates a KZoneAllocator object.
Parameters:
_blockSize | Size in bytes of the blocks requested from malloc.
|
~KZoneAllocator ()
| ~KZoneAllocator |
Destructs the ZoneAllocator and free all memory allocated by it.
void* allocate (size_t _size)
| allocate |
Allocates a memory block.
Parameters:
_size | Size in bytes of the memory block. Memory is aligned to
the size of a pointer.
|
void deallocate (void *ptr)
| deallocate |
Gives back a block returned by allocate() to the zone
allocator, and possibly deallocates the block holding it (when it's
empty). The first deallocate() after many allocate() calls
(or the first at all) builds an internal data structure for speeding
up deallocation. The consistency of that structure is maintained
from then on (by allocate() and deallocate()) unless many
more objects are allocated without any intervening deallocation, in
which case it's thrown away and rebuilt at the next deallocate().
The effect of this is, that such initial deallocate() calls take
more time then the normal calls, and that after this list is built, i.e.
generally if deallocate() is used at all, also allocate() is a
little bit slower. This means, that if you want to squeeze out the last
bit performance you would want to use KZoneAllocator as an obstack, i.e.
just use the functions allocate() and free_since(). All the
remaining memory is returned to the system if the zone allocator
is destroyed.
Parameters:
void free_since (void *ptr)
| free_since |
Deallocate many objects at once.
free_since() deallocates all objects allocated after ptr
,
including ptr
itself.
The intended use is something along the lines of:
Note, that we don't need to remember all the pointers to the 12-byte
objects for freeing them. The free_since() does deallocate them
all at once.
Parameters:
ptr | Pointer as returned by allocate(). It acts like
a kind of mark of a certain position in the stack of all objects,
off which you can throw away everything above that mark.
|
[protected]
void addBlock (MemBlock *b)
| addBlock |
[protected]
void delBlock (MemBlock *b)
| delBlock |
[protected]
void insertHash (MemBlock *b)
| insertHash |
[protected]
void initHash ()
| initHash |
[protected]
MemBlock * currentBlock
| currentBlock |
[protected]
unsigned long blockSize
| blockSize |
[protected]
unsigned long blockOffset
| blockOffset |
[protected]
[protected]
unsigned int num_blocks
| num_blocks |
[protected]
MemList ** hashList
| hashList |
[protected]
unsigned int hashSize
| hashSize |
[protected]
[protected]
- Version: $Id: KZoneAllocator.html 149726 2002-04-16 07:39:43Z dfaure $
- Author: Waldo Bastian , Michael Matz
- Generated: dfaure on faure on Tue Apr 16 08:49:00 2002, using kdoc 2.0a53.