27 #include <sys/types.h>
32 #include "../../source/blender/blenlib/BLI_strict_flags.h"
57 #define MEMHEAD_FROM_PTR(ptr) (((MemHead *)ptr) - 1)
58 #define PTR_FROM_MEMHEAD(memhead) (memhead + 1)
59 #define MEMHEAD_ALIGNED_FROM_PTR(ptr) (((MemHeadAligned *)ptr) - 1)
60 #define MEMHEAD_IS_ALIGNED(memhead) ((memhead)->len & (size_t)MEMHEAD_ALIGN_FLAG)
63 #define USE_ATOMIC_MAX
70 *maximum_value = value > *maximum_value ? value : *maximum_value;
75 __attribute__((
format(printf, 1, 2)))
84 vsnprintf(buf,
sizeof(buf),
str, ap);
86 buf[
sizeof(buf) - 1] =
'\0';
113 #ifdef WITH_ASSERT_ABORT
123 memset(memh + 1, 255,
len);
143 prev_size, (
size_t)memh_aligned->
alignment,
"dupli_malloc");
148 memcpy(newp, vmemh, prev_size);
172 memcpy(newp, vmemh,
len);
176 memcpy(newp, vmemh, old_len);
208 memcpy(newp, vmemh,
len);
211 memcpy(newp, vmemh, old_len);
216 memset(((
char *)newp) + old_len, 0,
len - old_len);
258 "Calloc array aborted due to integer overflow: "
281 memset(memh + 1, 255,
len);
303 "Malloc array aborted due to integer overflow: "
320 assert(alignment < 1024);
351 memset(memh + 1, 255,
len);
385 printf(
"\ntotal memory len: %.3f MB\n", (
double)
mem_in_use / (
double)(1024 * 1024));
386 printf(
"peak memory len: %.3f MB\n", (
double)
peak_mem / (
double)(1024 * 1024));
388 "\nFor more detailed per-block statistics run Blender with memory debugging command line "
391 #ifdef HAVE_MALLOC_STATS
392 printf(
"System Statistics:\n");
437 return "unknown block name ptr";
440 return "MEM_lockfree_name_ptr(NULL)";
void BLI_kdtree_nd_() free(KDTree *tree)
Read Guarded memory(de)allocation.
Provides wrapper around system-specific atomic primitives, and some extensions (faked-atomic operatio...
ATOMIC_INLINE size_t atomic_add_and_fetch_z(size_t *p, size_t x)
ATOMIC_INLINE size_t atomic_sub_and_fetch_z(size_t *p, size_t x)
ATOMIC_INLINE unsigned int atomic_add_and_fetch_u(unsigned int *p, unsigned int x)
ATOMIC_INLINE size_t atomic_fetch_and_update_max_z(size_t *p, size_t x)
ATOMIC_INLINE unsigned int atomic_sub_and_fetch_u(unsigned int *p, unsigned int x)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
bool leak_detector_has_run
char free_after_leak_detection_message[]
void aligned_free(void *ptr)
void * aligned_malloc(size_t size, size_t alignment)
MEM_INLINE bool MEM_size_safe_multiply(size_t a, size_t b, size_t *result)
#define MEMHEAD_REAL_PTR(memh)
#define MEMHEAD_ALIGN_PADDING(alignment)
#define SIZET_ALIGN_4(len)
#define ALIGNED_MALLOC_MINIMUM_ALIGNMENT
void * MEM_lockfree_dupallocN(const void *vmemh)
void * MEM_lockfree_mallocN_aligned(size_t len, size_t alignment, const char *str)
void * MEM_lockfree_calloc_arrayN(size_t len, size_t size, const char *str)
void MEM_lockfree_reset_peak_memory(void)
void MEM_lockfree_set_error_callback(void(*func)(const char *))
void MEM_lockfree_printmemlist_stats(void)
void MEM_lockfree_set_memory_debug(void)
#define PTR_FROM_MEMHEAD(memhead)
void * MEM_lockfree_reallocN_id(void *vmemh, size_t len, const char *str)
static bool malloc_debug_memset
static unsigned int totblock
static void(* error_callback)(const char *)
bool MEM_lockfree_consistency_check(void)
void * MEM_lockfree_callocN(size_t len, const char *str)
const char * MEM_lockfree_name_ptr(void *vmemh)
static void print_error(const char *str,...)
void MEM_lockfree_printmemlist_pydict(void)
#define MEMHEAD_IS_ALIGNED(memhead)
void MEM_lockfree_printmemlist(void)
void MEM_lockfree_freeN(void *vmemh)
void * MEM_lockfree_mallocN(size_t len, const char *str)
void * MEM_lockfree_recallocN_id(void *vmemh, size_t len, const char *str)
struct MemHeadAligned MemHeadAligned
void MEM_lockfree_callbackmemlist(void(*func)(void *))
#define MEMHEAD_FROM_PTR(ptr)
void * MEM_lockfree_malloc_arrayN(size_t len, size_t size, const char *str)
#define MEMHEAD_ALIGNED_FROM_PTR(ptr)
size_t MEM_lockfree_get_memory_in_use(void)
size_t MEM_lockfree_get_peak_memory(void)
size_t MEM_lockfree_allocN_len(const void *vmemh)
unsigned int MEM_lockfree_get_memory_blocks_in_use(void)
MEM_INLINE void update_maximum(size_t *maximum_value, size_t value)