15#include "memtracer/common.h"
16#include "common/lang/thread.h"
17#include "common/lang/atomic.h"
18#include "common/lang/mutex.h"
22#define MT MemTracer::get_instance()
36 static void __attribute__((constructor)) init();
38 static void __attribute__((destructor)) destroy();
40 size_t allocated_memory()
const {
return allocated_memory_.load(); }
42 size_t meta_memory()
const {
return ((alloc_cnt_.load() - free_cnt_.load()) *
sizeof(
size_t)); }
44 size_t print_interval()
const {
return print_interval_ms_; }
46 size_t memory_limit()
const {
return memory_limit_; }
48 bool is_stop()
const {
return is_stop_; }
50 void set_print_interval(
size_t print_interval_ms) { print_interval_ms_ = print_interval_ms; }
52 inline void add_allocated_memory(
size_t size) { allocated_memory_.fetch_add(size); }
54 void set_memory_limit(
size_t memory_limit)
56 call_once(memory_limit_once_, [&]() { memory_limit_ = memory_limit; });
59 void alloc(
size_t size);
61 void free(
size_t size);
63 inline void init_hook_funcs() { call_once(init_hook_funcs_once_, init_hook_funcs_impl); }
66 static void init_hook_funcs_impl();
68 void init_stats_thread();
75 bool is_stop_ =
false;
76 atomic<size_t> allocated_memory_{};
77 atomic<size_t> alloc_cnt_{};
78 atomic<size_t> free_cnt_{};
79 once_flag init_hook_funcs_once_;
80 once_flag memory_limit_once_;
81 size_t memory_limit_ = UINT64_MAX;
82 size_t print_interval_ms_ = 0;
Definition: memtracer.h:30