ArmNN
 25.11
Loading...
Searching...
No Matches
SampleMemoryManager.cpp
Go to the documentation of this file.
1//
2// Copyright © 2020 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
7
8#include <algorithm>
9
10namespace sdb // sample dynamic backend
11{
12
15
18
20{
21 if (!m_FreePools.empty())
22 {
23 Pool* res = m_FreePools.back();
24 m_FreePools.pop_back();
25 res->Reserve(numBytes);
26 return res;
27 }
28 else
29 {
30 m_Pools.push_front(Pool(numBytes));
31 return &m_Pools.front();
32 }
33}
34
36{
37 m_FreePools.push_back(pool);
38}
39
44
46{
47 for (Pool &pool: m_Pools)
48 {
49 pool.Acquire();
50 }
51}
52
54{
55 for (Pool &pool: m_Pools)
56 {
57 pool.Release();
58 }
59}
60
61SampleMemoryManager::Pool::Pool(unsigned int numBytes)
62 : m_Size(numBytes),
63 m_Pointer(nullptr)
64{}
65
67{
68 if (m_Pointer)
69 {
70 Release();
71 }
72}
73
75{
76 return m_Pointer;
77}
78
79void SampleMemoryManager::Pool::Reserve(unsigned int numBytes)
80{
81 m_Size = std::max(m_Size, numBytes);
82}
83
85{
86 m_Pointer = ::operator new(size_t(m_Size));
87}
88
90{
91 ::operator delete(m_Pointer);
92 m_Pointer = nullptr;
93}
94
95} // namespace sdb
void Reserve(unsigned int numBytes)
Pool * Manage(unsigned int numBytes)