5 #ifndef BITCOIN_MEMUSAGE_H
6 #define BITCOIN_MEMUSAGE_H
16 #include <unordered_map>
17 #include <unordered_set>
56 template <
typename X>
static inline size_t DynamicUsage(X *
const &v) {
59 template <
typename X>
static inline size_t DynamicUsage(
const X *
const &v) {
76 }
else if (
sizeof(
void *) == 8) {
77 return ((alloc + 31) >> 4) << 4;
78 }
else if (
sizeof(
void *) == 4) {
79 return ((alloc + 15) >> 3) << 3;
106 template <
typename X>
111 template <
unsigned int N,
typename X,
typename S,
typename D>
116 template <
typename X,
typename Y>
121 template <
typename X,
typename Y>
126 template <
typename X,
typename Y,
typename Z>
131 template <
typename X,
typename Y,
typename Z>
138 template <
typename X,
typename Y>
144 template <
typename X,
typename Y>
149 template <
typename X>
154 template <
typename X>
170 template <
typename X,
typename Y>
176 template <
typename X,
typename Y,
typename Z>
177 static inline size_t DynamicUsage(
const std::unordered_map<X, Y, Z> &m) {
Map whose keys are pointers, but are compared by their dereferenced values.
Implements a drop-in replacement for std::vector<T> which stores up to N elements directly (without h...
size_t allocated_memory() const
static size_t DynamicUsage(const int8_t &v)
Dynamic memory usage for built-in types is zero.
static size_t IncrementalDynamicUsage(const std::set< X, Y > &s)
static size_t MallocUsage(size_t alloc)
Compute the total memory used by allocating alloc bytes.
void * class_type
Various platforms use different sized counters here.