13 #include <sys/types.h>
18 #include "../../source/blender/blenlib/BLI_strict_flags.h"
43 #define MEMHEAD_FROM_PTR(ptr) (((MemHead *)ptr) - 1)
44 #define PTR_FROM_MEMHEAD(memhead) (memhead + 1)
45 #define MEMHEAD_ALIGNED_FROM_PTR(ptr) (((MemHeadAligned *)ptr) - 1)
46 #define MEMHEAD_IS_ALIGNED(memhead) ((memhead)->len & (size_t)MEMHEAD_ALIGN_FLAG)
47 #define MEMHEAD_LEN(memhead) ((memhead)->len & ~((size_t)(MEMHEAD_ALIGN_FLAG)))
50 #define USE_ATOMIC_MAX
57 *maximum_value = value > *maximum_value ? value : *maximum_value;
71 vsnprintf(buf,
sizeof(buf),
str, ap);
73 buf[
sizeof(buf) - 1] =
'\0';
97 #ifdef WITH_ASSERT_ABORT
110 memset(memh + 1, 255,
len);
130 prev_size, (
size_t)memh_aligned->
alignment,
"dupli_malloc");
135 memcpy(newp, vmemh, prev_size);
159 memcpy(newp, vmemh,
len);
163 memcpy(newp, vmemh, old_len);
195 memcpy(newp, vmemh,
len);
198 memcpy(newp, vmemh, old_len);
203 memset(((
char *)newp) + old_len, 0,
len - old_len);
245 "Calloc array aborted due to integer overflow: "
268 memset(memh + 1, 255,
len);
290 "Malloc array aborted due to integer overflow: "
307 assert(alignment < 1024);
338 memset(memh + 1, 255,
len);
372 printf(
"\ntotal memory len: %.3f MB\n", (
double)
mem_in_use / (
double)(1024 * 1024));
373 printf(
"peak memory len: %.3f MB\n", (
double)
peak_mem / (
double)(1024 * 1024));
375 "\nFor more detailed per-block statistics run Blender with memory debugging command line "
378 #ifdef HAVE_MALLOC_STATS
379 printf(
"System Statistics:\n");
424 return "unknown block name ptr";
427 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)
struct AtomicSpinLock __attribute__((aligned(32))) AtomicSpinLock
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SyclQueue void void size_t num_bytes void
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_LEN(memhead)
#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)