DataChunker

Engine/source/core/dataChunker.h

Implements a chunked data allocator.

More...

Classes:

class

Block of allocated memory.

Public Types

enum
_Anonymous_ {
  PaddDBSize = (sizeof(DataBlock) + 3) & ~3
  ChunkSize = 16384 - PaddDBSize
}

Public Attributes

The size allocated for each page in the DataChunker.

current page we're allocating data from.

Public Functions

Initialize using blocks of a given size.

void *
alloc(S32 size)

Return a pointer to a chunk of memory from a pre-allocated block.

freeBlocks(bool keepOne)

Free all allocated memory blocks.

Swaps the memory allocated in one data chunker for another.

Detailed Description

Implements a chunked data allocator.

Calling new/malloc all the time is a time consuming operation. Therefore, we provide the DataChunker, which allocates memory in blocks of chunkSize (by default 16k, see ChunkSize, though it can be set in the constructor), then doles it out as requested, in chunks of up to chunkSize in size.

It will assert if you try to get more than ChunkSize bytes at a time, and it deals with the logic of allocating new blocks and giving out word-aligned chunks.

Note that new/free/realloc WILL NOT WORK on memory gotten from the DataChunker. This also only grows (you can call freeBlocks to deallocate and reset things).

Public Types

@68

Enumerator

PaddDBSize = (sizeof(DataBlock) + 3) & ~3

Padded size of DataBlock.

ChunkSize = 16384 - PaddDBSize

Default size of each DataBlock page in the DataChunker.

Public Attributes

S32 mChunkSize 

The size allocated for each page in the DataChunker.

DataBlock * mCurBlock 

current page we're allocating data from.

If the data size request is greater than the memory space currently available in the current page, a new page will be allocated.

Public Functions

DataChunker(S32 size)

Initialize using blocks of a given size.

One new block is allocated at constructor-time.

Parameters:

size

Size in bytes of the space to allocate for each block.

~DataChunker()

alloc(S32 size)

Return a pointer to a chunk of memory from a pre-allocated block.

This memory goes away when you call freeBlocks.

This memory is word-aligned. Parameters:

size

Size of chunk to return. This must be less than chunkSize or else an assertion will occur.

countUsedBlocks()

freeBlocks(bool keepOne)

Free all allocated memory blocks.

This invalidates all pointers returned from alloc().

setChunkSize(U32 size)

swap(DataChunker & d)

Swaps the memory allocated in one data chunker for another.

This can be used to implement packing of memory stored in a DataChunker.