Source Code (Use browser search to find items of interest.)
Class Index
kdelibs'KZoneAllocator (./kdelibs/kdecore/kallocator.h:42)
class KZoneAllocator
{
public:
/**
* Create a ZoneAllocator
* @param _blockSize Size in bytes of the blocks requested from malloc.
*/
KZoneAllocator(long _blockSize = 128*1024);
/**
* Destruct the ZoneAllocator and free all memory allocated by it.
*/
~KZoneAllocator();
/**
* Allocate a memory block.
* @param _size Size in bytes of the memory block. Memory is not alligned!
*/
void* allocate(size_t _size);
protected:
long blockSize;
QList<char> memoryBlocks;
char *currentBlock;
long blockOffset;
private:
KZoneAllocatorPrivate *d;
};
kdelibs'KZoneAllocator::KZoneAllocator() (./kdelibs/kdecore/kallocator.cpp:28)
KZoneAllocator::KZoneAllocator(long _blockSize)
: blockSize(_blockSize), blockOffset(0)
{
currentBlock = new char[_blockSize];
memoryBlocks.append(currentBlock);
}
kdelibs'KZoneAllocator::~KZoneAllocator() (./kdelibs/kdecore/kallocator.cpp:35)
KZoneAllocator::~KZoneAllocator()
{
while (!memoryBlocks.isEmpty())
{
char *oldBuffer = (char *) memoryBlocks.take(0);
delete [] oldBuffer;
}
}
void *
kdelibs'KZoneAllocator::allocate() (./kdelibs/kdecore/kallocator.cpp:45)
KZoneAllocator::allocate(size_t _size)
{
// Use the size of (void *) as alignment
const size_t alignment = sizeof(void *);
_size = (_size + alignment - 1) & ~(alignment - 1);
if ((long) _size + blockOffset > blockSize)
{
currentBlock = new char[blockSize];
memoryBlocks.append(currentBlock);
blockOffset = 0;
printf("Allocating block #%d\n", memoryBlocks.count());
}
void *result = (void *)(currentBlock+blockOffset);
blockOffset += _size;
return result;
}