src/core/memory.h
Namespaces
Name |
---|
dakku dakku namespace |
Classes
Name | |
---|---|
class | dakku::MemoryArena memory arena (unsynchronized) |
class | dakku::GlobalMemoryArena global memory arena |
Defines
Name | |
---|---|
DAKKU_ALLOCA(type, count) allocated memory from stack |
Macros Documentation
define DAKKU_ALLOCA
allocated memory from stack
Parameters:
- type type that needs to allocate
- count the number of [type]s
Source code
#ifndef DAKKU_CORE_MEMORY_H_
#define DAKKU_CORE_MEMORY_H_
#include <core/logger.h>
#include <oneapi/tbb.h>
#include <oneapi/tbb/scalable_allocator.h>
#if __has_include(<malloc.h>)
#include <malloc.h>
#endif
#if __has_include(<alloca.h>)
#include <alloca.h>
#endif
#include <memory_resource>
namespace dakku {
#define DAKKU_ALLOCA(type, count) \
(reinterpret_cast<(type) *>(alloca((count) * sizeof(type))))
class DAKKU_EXPORT_CORE MemoryArena {
public:
explicit MemoryArena() = default;
explicit MemoryArena(std::pmr::memory_resource *buffer)
: upStream(buffer), resource(&upStream) {}
template <typename T, typename... Args>
T *allocObject(Args &&...args) {
return std::pmr::polymorphic_allocator<T>{&resource}.template new_object<T>(
std::forward<Args>(args)...);
}
void release() { resource.release(); }
private:
oneapi::tbb::cache_aligned_resource upStream{
oneapi::tbb::scalable_memory_resource()};
std::pmr::unsynchronized_pool_resource resource{&upStream};
};
class DAKKU_EXPORT_CORE GlobalMemoryArena {
public:
static MemoryArena &instance();
private:
GlobalMemoryArena() = default;
MemoryArena arena;
};
} // namespace dakku
#endif
Updated on 2022-04-30 at 15:46:11 +0000