MGL(Win32)
読み取り中…
検索中…
一致する文字列を見つけられません
mgl_memory_default_allocator.h
[詳解]
1// SPDX-License-Identifier: Zlib
2/* ------------------------------------------------------------------------- */
9/* ------------------------------------------------------------------------- */
10
11#ifndef INCGUARD_MGL_MEMORY_DEFAULT_ALLOCATOR_H_1651231444
12#define INCGUARD_MGL_MEMORY_DEFAULT_ALLOCATOR_H_1651231444
13
14#include <array>
15#include <atomic>
16#include <cstdio>
17#include <cstdlib>
18
21
22namespace MGL::Memory
23{
26{
27public:
30 {
32 size_t fixedSizeAllocatorMinimumBlockSize{128}; // 最小128バイト
33
35 size_t fixedSizeAllocatorMemoryPoolSize{static_cast<size_t>(1) * 1024 * 1024}; // メモリプールは1MiB
36
38 void *(*allocator)(size_t size){nullptr}; // アロケータに malloc()を使用
39
41 void (*deallocator)(void *buffer){nullptr}; // デアロケータに free()を使用
42 };
43
44 DefaultAllocator() noexcept;
45
47 static constexpr AllocatorType kAllocatorType = MakeAllocatorType("MGL-DefaultAllocator");
48
49 /* ------------------------------------------------------------------------- */
55 /* ------------------------------------------------------------------------- */
56 AllocatorType GetType() const noexcept override
57 {
58 return kAllocatorType;
59 }
60
61 bool Initialize(const Configuration &config) noexcept;
62
63 bool Initialize() noexcept override;
64 bool IsInitialized() const noexcept override;
65 [[nodiscard]] void *Allocate(size_t size) noexcept override;
66 void Deallocate(void *buffer) noexcept override;
67
68 bool GetSizeInfo(size_t &dest, uint32_t key, uint32_t arg) noexcept override;
69
70private:
71 bool _isInitialized{false};
72
73 // 固定メモリアロケータの数.アルゴリズムに関わるので変更不可.
74 static constexpr size_t kFixedSizeAllocatorCount = 4;
75
76 Configuration _config;
77 std::array<FixedSizeAllocator, kFixedSizeAllocatorCount> _fixedSizeAllocatorArray;
78 size_t _fixedSizeBlockMax{0};
79 uint8_t _shiftBit{0};
80
81 std::atomic<size_t> _systemUsedCount{0};
82 std::atomic<size_t> _systemUsedSize{0};
83};
84
85} // namespace MGL::Memory
86
87#endif // INCGUARD_MGL_MEMORY_DEFAULT_ALLOCATOR_H_1651231444
88
89// vim: et ts=4 sw=4 sts=4
メモリアロケータインターフェース
Definition mgl_memory_allocator.h:42
デフォルトのメモリアロケータ
Definition mgl_memory_default_allocator.h:26
AllocatorType GetType() const noexcept override
このアロケータを表す値を取得
Definition mgl_memory_default_allocator.h:56
static constexpr AllocatorType kAllocatorType
このアロケータを表す値
Definition mgl_memory_default_allocator.h:47
bool GetSizeInfo(size_t &dest, uint32_t key, uint32_t arg) noexcept override
サイズ情報を取得
Definition mgl_memory_default_allocator.cc:227
void Deallocate(void *buffer) noexcept override
デアロケート
Definition mgl_memory_default_allocator.cc:196
bool Initialize() noexcept override
初期化処理
Definition mgl_memory_default_allocator.cc:127
void * Allocate(size_t size) noexcept override
アロケート
Definition mgl_memory_default_allocator.cc:153
bool IsInitialized() const noexcept override
初期化状態を取得
Definition mgl_memory_default_allocator.cc:140
DefaultAllocator() noexcept
コンストラクタ
Definition mgl_memory_default_allocator.cc:34
MGL メモリアロケータ
MGL 固定サイズアロケータ
デフォルトアロケータの設定
Definition mgl_memory_default_allocator.h:30
size_t fixedSizeAllocatorMinimumBlockSize
固定サイズアロケータの最小サイズ(2のn乗の値である必要がある)
Definition mgl_memory_default_allocator.h:32
void(* deallocator)(void *buffer)
固定サイズアロケータが使用できない場合のデアロケータの指定(nullptr で free()を使用)
Definition mgl_memory_default_allocator.h:41
size_t fixedSizeAllocatorMemoryPoolSize
固定サイズアロケータのメモリプールのサイズ(最小サイズの8倍より大きくなければならない)
Definition mgl_memory_default_allocator.h:35