3 #ifndef INCLUDE_NN_NLIB_HEAP_STACKHEAP_H_
4 #define INCLUDE_NN_NLIB_HEAP_STACKHEAP_H_
8 #if defined(_MSC_VER) && defined(nx_heap_EXPORTS)
10 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT
20 void FreeAll() NLIB_NOEXCEPT { m_Cur = m_Start; }
24 void*
Alloc(
size_t n,
size_t algn) NLIB_NOEXCEPT {
25 if (n == 0)
return NULL;
26 if (algn == 0 || 0 != (algn & (algn - 1)))
return NULL;
27 uint8_t* ret = this->RoundUp(m_Cur, algn);
28 uint8_t* newTop = ret + n;
29 if (newTop > m_End)
return NULL;
33 void*
Alloc(
size_t n) NLIB_NOEXCEPT {
return this->
Alloc(n, 8); }
35 uint8_t* ptr =
reinterpret_cast<uint8_t*
>(p);
36 if (ptr >= m_Start && ptr < m_Cur) {
43 void Dump() NLIB_NOEXCEPT;
46 static uint8_t* RoundUp(uint8_t* ptr,
size_t algn) NLIB_NOEXCEPT {
48 intptr_t tmp =
reinterpret_cast<intptr_t
>(ptr);
49 return reinterpret_cast<uint8_t*
>(tmp + (-tmp & (algn - 1)));
52 m_Start =
reinterpret_cast<uint8_t*
>(start);
53 m_End =
reinterpret_cast<uint8_t*
>(end);
59 uint32_t m_HeapOption;
67 #if defined(_MSC_VER) && defined(nx_heap_EXPORTS)
68 #undef NLIB_VIS_PUBLIC
69 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT
72 #endif // INCLUDE_NN_NLIB_HEAP_STACKHEAP_H_
Allocator that allocates memory from the top like a stack.
#define NLIB_NOEXCEPT
Defines noexcept geared to the environment, or the equivalent.
void * Alloc(size_t n) noexcept
Allocates a memory block.
#define NLIB_FINAL
Defines final if it is available for use. If not, holds an empty string.
void * Alloc(size_t n, size_t algn) noexcept
Allocates a memory block with a specific alignment.
errno_t Free(void *p) noexcept
Moves the location of the next memory allocation back to the address that p points to...
A file that contains the configuration information for each development environment.
void FreeAll() noexcept
Frees all memory and restores the heap to its post-initialization state.