13 #ifdef BCP_MEMPOOL_SAVE_BLOCKHEADS
22 #ifdef BCP_MEMPOOL_SAVE_BLOCKHEADS
23 , block_heads(0), block_num(0), max_block_num(0)
30 return ::operator
new(
n);
36 const size_t ptr_in_entry =
entry_size/
sizeof(
void**) +
38 const size_t dist = ptr_in_entry *
sizeof(
void **);
39 void ** block =
static_cast<void**
>(::operator
new(
BLOCK_SIZE*dist));
40 #ifdef BCP_MEMPOOL_SAVE_BLOCKHEADS
43 if (max_block_num == block_num) {
44 max_block_num = 1.2 * block_num + 10;
45 const void *** old_block_heads = block_heads;
46 block_heads =
static_cast<void ***
>(::operator
new(max_block_num));
47 for (
size_t i = 0; i < block_num; ++i)
48 block_heads[i] = old_block_heads[i];
49 ::operator
delete(old_block_heads);
52 block_heads[block_num++] = block;
57 block[i*ptr_in_entry] =
58 static_cast<void*>(block + ((i+1)*ptr_in_entry));
60 block[(BLOCK_SIZE-1)*ptr_in_entry] = 0;
64 return static_cast<void*
>(p);
68 inline void free(
void *p,
size_t n) {
74 void** pp =
static_cast<void**
>(p);
80 #ifdef BCP_MEMPOOL_SAVE_BLOCKHEADS
81 for (
size_t i = 0; i < block_num; ++i) {
82 ::operator
delete(block_heads[i]);
84 ::operator
delete(block_heads);
void free(void *p, size_t n)
BCP_MemPool(const size_t n, const size_t bl_size=1023)