/
memory_pool.cc
70 lines (55 loc) · 2 KB
/
memory_pool.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "memory_pool.h"
#include "../memory/pointer_util.h"
#include <iostream>
namespace igad
{
namespace memory
{
//------------------------------------------------------------------------------------------------------
MemoryPool::MemoryPool(void* start, const size_t& size) :
memory_pool_(start),
size_(size),
start_offset_(0)
{
}
//------------------------------------------------------------------------------------------------------
MemoryPool::~MemoryPool()
{
}
//------------------------------------------------------------------------------------------------------
MemoryPool* MemoryPool::Create(const size_t& size)
{
void* memory = malloc(size);
void* aligned_address = PointerUtil::AlignForward(memory, __alignof(MemoryPool));
uint32_t adjustment = PointerUtil::AlignForwardAdjustment(memory, __alignof(MemoryPool));
MemoryPool* memory_pool = new (aligned_address) MemoryPool(memory, size);
memory_pool->SetStartOffset(adjustment + sizeof(MemoryPool));
return memory_pool;
}
//------------------------------------------------------------------------------------------------------
void* MemoryPool::GetStartOfMemoryPool()
{
return (void*)((uintptr_t)memory_pool_ + (uintptr_t)start_offset_);
}
//------------------------------------------------------------------------------------------------------
void* MemoryPool::GetActualStartOfMemoryPool()
{
return memory_pool_;
}
//------------------------------------------------------------------------------------------------------
const size_t& MemoryPool::GetSizeOfMemoryPool()
{
return size_;
}
//------------------------------------------------------------------------------------------------------
const size_t& MemoryPool::GetStartOffset()
{
return start_offset_;
}
//------------------------------------------------------------------------------------------------------
void MemoryPool::SetStartOffset(const size_t& offset)
{
start_offset_ = offset;
}
}
}