27#include <unordered_map>
32#elif defined(__linux__)
37#define SIZE_MAX ((size_t)-1)
51 return (uint32_t)((((uint64_t)width + align - 1) / align) * align);
68 HeapCompact(GetProcessHeap(), 0);
76 void* ptr = std::malloc(size);
90 void*
calloc(
size_t num,
size_t size)
92 if(num == 0 || size == 0)
94 void* ptr = std::calloc(num, size);
99 size_t total_size = num * size;
116 assert((alignment != 0U) && ((alignment & (alignment - 1U)) == 0U));
117 assert(alignment >=
sizeof(
void*));
122 bytes = ((bytes + alignment - 1) / alignment) * alignment;
125 void* ptr = _aligned_malloc(bytes, alignment);
127 void* ptr = std::aligned_alloc(alignment, bytes);
149 bool was_allocated =
false;
156 old_size = it->second;
158 was_allocated =
true;
162 void* new_ptr = std::realloc(ptr, new_size);
254 double total_mb =
static_cast<double>(stats.total_allocated) / (1024 * 1024);
255 double current_mb =
static_cast<double>(stats.current_allocated) / (1024 * 1024);
256 double peak_mb =
static_cast<double>(stats.peak_allocated) / (1024 * 1024);
258 std::printf(
"Memory Statistics:\n");
259 std::printf(
" Allocations: %zu\n", stats.allocations);
260 std::printf(
" Deallocations: %zu\n", stats.deallocations);
261 std::printf(
" Reallocations: %zu\n", stats.reallocations);
262 std::printf(
" Total Allocated: %.2f MB\n", total_mb);
263 std::printf(
" Current Allocated: %.2f MB\n", current_mb);
264 std::printf(
" Peak Allocated: %.2f MB\n", peak_mb);
265 std::printf(
" Current Active Allocations: %zu\n", stats.allocations - stats.deallocations);
271 const char* debug_env = std::getenv(
"GRK_DEBUG");
272 track_stats = (debug_env && std::atoi(debug_env) == 5);
void * realloc(void *ptr, size_t new_size)
Definition MemManager.h:143
Stats get_stats() const
Definition MemManager.h:241
static MemoryManager & get()
Definition MemManager.h:57
std::atomic< size_t > reallocations
Definition MemManager.h:292
static void releaseFreedPages()
Definition MemManager.h:63
size_t peak_allocated
Definition MemManager.h:295
std::unordered_map< void *, size_t > allocation_map
Definition MemManager.h:296
bool track_details
Definition MemManager.h:288
void * aligned_malloc(size_t bytes)
Definition MemManager.h:109
std::atomic< size_t > total_allocated
Definition MemManager.h:293
void * aligned_malloc(size_t alignment, size_t bytes)
Definition MemManager.h:114
MemoryManager()
Definition MemManager.h:269
std::mutex stats_mutex
Definition MemManager.h:289
void * malloc(size_t size)
Definition MemManager.h:72
MemoryManager & operator=(const MemoryManager &)=delete
void print_stats() const
Definition MemManager.h:248
void * calloc(size_t num, size_t size)
Definition MemManager.h:90
bool track_stats
Definition MemManager.h:287
void free(void *ptr)
Definition MemManager.h:185
~MemoryManager()
Definition MemManager.h:276
std::atomic< size_t > allocations
Definition MemManager.h:290
std::atomic< size_t > deallocations
Definition MemManager.h:291
size_t current_allocated
Definition MemManager.h:294
void aligned_free(void *ptr)
Definition MemManager.h:206
MemoryManager(const MemoryManager &)=delete
ResWindow.
Definition CompressedChunkCache.h:36
void grk_print_memory_stats()
Definition MemManager.h:328
const size_t grk_buffer_alignment
Definition MemManager.h:43
void * grk_calloc(size_t num, size_t size)
Definition MemManager.h:304
void * grk_aligned_malloc(size_t bytes)
Definition MemManager.h:308
uint32_t grk_make_aligned_width(uint32_t width)
Definition MemManager.h:46
void grk_free(void *ptr)
Definition MemManager.h:320
void * grk_malloc(size_t size)
Definition MemManager.h:300
void grk_aligned_free(void *ptr)
Definition MemManager.h:324
void * grk_realloc(void *ptr, size_t new_size)
Definition MemManager.h:316
Definition MemManager.h:232
size_t current_allocated
Definition MemManager.h:237
size_t allocations
Definition MemManager.h:233
size_t peak_allocated
Definition MemManager.h:238
size_t reallocations
Definition MemManager.h:235
size_t total_allocated
Definition MemManager.h:236
size_t deallocations
Definition MemManager.h:234