MemoryBlockAllocator::MemoryBlockAllocator(size_t size, size_t counts, Bitfield* pBitfield, void* pAddress, NewAlignment alignment) : _pBitfield(pBitfield), _pBlocks(nullptr), _pMemoryAddress(pAddress), _blockSize(size), _blockCounts(counts), _alignment(alignment) { _pBlocks = (MemoryBlock*)align_new<MemoryBlock>(_blockCounts, _alignment); SetMem((uint8_t*)_pBlocks, _blockCounts*sizeof(MemoryBlock), 0); MemoryBlock* pTtemp = _pBlocks; for (unsigned int i = 0; i < _blockCounts; i++) { char* paddress = static_cast<char*>(_pMemoryAddress)+i*_blockSize; pTtemp->InitBlock(_blockSize, paddress); pTtemp = align_get_next<MemoryBlock>(pTtemp, _alignment); } }