Blender V4.3
mallocn_lockfree_impl.cc File Reference
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include "MEM_guardedalloc.h"
#include "../../source/blender/blenlib/BLI_strict_flags.h"
#include "atomic_ops.h"
#include "mallocn_intern.hh"
#include "mallocn_intern_function_pointers.hh"

Go to the source code of this file.

Classes

struct  MemHead
 
struct  MemHeadAligned
 

Macros

#define MEMHEAD_FROM_PTR(ptr)   (((MemHead *)ptr) - 1)
 
#define PTR_FROM_MEMHEAD(memhead)   (memhead + 1)
 
#define MEMHEAD_ALIGNED_FROM_PTR(ptr)   (((MemHeadAligned *)ptr) - 1)
 
#define MEMHEAD_IS_ALIGNED(memhead)   ((memhead)->len & size_t(MEMHEAD_FLAG_ALIGN))
 
#define MEMHEAD_IS_FROM_CPP_NEW(memhead)   ((memhead)->len & size_t(MEMHEAD_FLAG_FROM_CPP_NEW))
 
#define MEMHEAD_LEN(memhead)   ((memhead)->len & ~size_t(MEMHEAD_FLAG_MASK))
 

Typedefs

typedef struct MemHead MemHead
 
typedef struct MemHeadAligned MemHeadAligned
 

Enumerations

enum  { MEMHEAD_FLAG_ALIGN = 1 << 0 , MEMHEAD_FLAG_FROM_CPP_NEW = 1 << 1 , MEMHEAD_FLAG_MASK = (1 << 2) - 1 }
 

Functions

static void print_error (const char *message, va_list str_format_args)
 
static void print_error (const char *message,...)
 
static void report_error_on_address (const void *vmemh, const char *message,...)
 
size_t MEM_lockfree_allocN_len (const void *vmemh)
 
void MEM_lockfree_freeN (void *vmemh, AllocationType allocation_type)
 
void * MEM_lockfree_dupallocN (const void *vmemh)
 
void * MEM_lockfree_reallocN_id (void *vmemh, size_t len, const char *str)
 
void * MEM_lockfree_recallocN_id (void *vmemh, size_t len, const char *str)
 
void * MEM_lockfree_callocN (size_t len, const char *str)
 
void * MEM_lockfree_calloc_arrayN (size_t len, size_t size, const char *str)
 
void * MEM_lockfree_mallocN (size_t len, const char *str)
 
void * MEM_lockfree_malloc_arrayN (size_t len, size_t size, const char *str)
 
void * MEM_lockfree_mallocN_aligned (size_t len, size_t alignment, const char *str, const AllocationType allocation_type)
 
void * MEM_lockfree_calloc_arrayN_aligned (const size_t len, const size_t size, const size_t alignment, const char *str)
 
void MEM_lockfree_printmemlist_pydict ()
 
void MEM_lockfree_printmemlist ()
 
void mem_lockfree_clearmemlist ()
 
void MEM_lockfree_callbackmemlist (void(*func)(void *))
 
void MEM_lockfree_printmemlist_stats ()
 
void MEM_lockfree_set_error_callback (void(*func)(const char *))
 
bool MEM_lockfree_consistency_check ()
 
void MEM_lockfree_set_memory_debug ()
 
size_t MEM_lockfree_get_memory_in_use ()
 
uint MEM_lockfree_get_memory_blocks_in_use ()
 
void MEM_lockfree_reset_peak_memory ()
 
size_t MEM_lockfree_get_peak_memory ()
 
const char * MEM_lockfree_name_ptr (void *vmemh)
 
void MEM_lockfree_name_ptr_set (void *UNUSED(vmemh), const char *UNUSED(str))
 

Variables

static bool malloc_debug_memset = false
 
static void(* error_callback )(const char *) = nullptr
 

Detailed Description

Memory allocation which keeps track on allocated memory counters

Definition in file mallocn_lockfree_impl.cc.

Macro Definition Documentation

◆ MEMHEAD_ALIGNED_FROM_PTR

◆ MEMHEAD_FROM_PTR

◆ MEMHEAD_IS_ALIGNED

#define MEMHEAD_IS_ALIGNED ( memhead)    ((memhead)->len & size_t(MEMHEAD_FLAG_ALIGN))

◆ MEMHEAD_IS_FROM_CPP_NEW

#define MEMHEAD_IS_FROM_CPP_NEW ( memhead)    ((memhead)->len & size_t(MEMHEAD_FLAG_FROM_CPP_NEW))

◆ MEMHEAD_LEN

#define MEMHEAD_LEN ( memhead)    ((memhead)->len & ~size_t(MEMHEAD_FLAG_MASK))

◆ PTR_FROM_MEMHEAD

#define PTR_FROM_MEMHEAD ( memhead)    (memhead + 1)

Typedef Documentation

◆ MemHead

typedef struct MemHead MemHead

◆ MemHeadAligned

typedef struct MemHeadAligned MemHeadAligned

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Guardedalloc always allocate multiple of 4 bytes. That means that the lower 2 bits of the len member of MemHead/MemHeadAligned data can be used for the bitflags below.

Enumerator
MEMHEAD_FLAG_ALIGN 

This block used aligned allocation, and its 'head' is of MemHeadAligned type.

MEMHEAD_FLAG_FROM_CPP_NEW 

This block of memory has been allocated from CPP new (e.g. #MEM_new, or some guardedalloc-overloaded new operator). It mainly checks that MEM_freeN is not directly called on it (#MEM_delete or some guardedalloc-overloaded delete operator should always be used instead).

MEMHEAD_FLAG_MASK 

Definition at line 56 of file mallocn_lockfree_impl.cc.

Function Documentation

◆ MEM_lockfree_allocN_len()

size_t MEM_lockfree_allocN_len ( const void * vmemh)

◆ MEM_lockfree_callbackmemlist()

void MEM_lockfree_callbackmemlist ( void(* func )(void *))

Definition at line 496 of file mallocn_lockfree_impl.cc.

Referenced by MEM_use_lockfree_allocator().

◆ MEM_lockfree_calloc_arrayN()

void * MEM_lockfree_calloc_arrayN ( size_t len,
size_t size,
const char * str )

◆ MEM_lockfree_calloc_arrayN_aligned()

void * MEM_lockfree_calloc_arrayN_aligned ( const size_t len,
const size_t size,
const size_t alignment,
const char * str )

◆ MEM_lockfree_callocN()

◆ mem_lockfree_clearmemlist()

void mem_lockfree_clearmemlist ( void )

Definition at line 493 of file mallocn_lockfree_impl.cc.

Referenced by MEM_use_lockfree_allocator().

◆ MEM_lockfree_consistency_check()

bool MEM_lockfree_consistency_check ( void )

Definition at line 520 of file mallocn_lockfree_impl.cc.

Referenced by MEM_use_lockfree_allocator().

◆ MEM_lockfree_dupallocN()

◆ MEM_lockfree_freeN()

◆ MEM_lockfree_get_memory_blocks_in_use()

uint MEM_lockfree_get_memory_blocks_in_use ( void )

Definition at line 535 of file mallocn_lockfree_impl.cc.

References memory_usage_block_num().

Referenced by MEM_use_lockfree_allocator().

◆ MEM_lockfree_get_memory_in_use()

size_t MEM_lockfree_get_memory_in_use ( void )

Definition at line 530 of file mallocn_lockfree_impl.cc.

References memory_usage_current().

Referenced by MEM_use_lockfree_allocator().

◆ MEM_lockfree_get_peak_memory()

size_t MEM_lockfree_get_peak_memory ( void )

Definition at line 546 of file mallocn_lockfree_impl.cc.

References memory_usage_peak().

Referenced by MEM_use_lockfree_allocator().

◆ MEM_lockfree_malloc_arrayN()

void * MEM_lockfree_malloc_arrayN ( size_t len,
size_t size,
const char * str )

◆ MEM_lockfree_mallocN()

◆ MEM_lockfree_mallocN_aligned()

◆ MEM_lockfree_name_ptr()

const char * MEM_lockfree_name_ptr ( void * vmemh)

Definition at line 552 of file mallocn_lockfree_impl.cc.

Referenced by MEM_use_lockfree_allocator().

◆ MEM_lockfree_name_ptr_set()

void MEM_lockfree_name_ptr_set ( void * UNUSEDvmemh,
const char * UNUSEDstr )

Definition at line 561 of file mallocn_lockfree_impl.cc.

◆ MEM_lockfree_printmemlist()

void MEM_lockfree_printmemlist ( void )

Definition at line 491 of file mallocn_lockfree_impl.cc.

Referenced by MEM_use_lockfree_allocator().

◆ MEM_lockfree_printmemlist_pydict()

void MEM_lockfree_printmemlist_pydict ( void )

Definition at line 489 of file mallocn_lockfree_impl.cc.

Referenced by MEM_use_lockfree_allocator().

◆ MEM_lockfree_printmemlist_stats()

void MEM_lockfree_printmemlist_stats ( void )

Definition at line 501 of file mallocn_lockfree_impl.cc.

References memory_usage_current(), memory_usage_peak(), and printf.

Referenced by MEM_use_lockfree_allocator().

◆ MEM_lockfree_reallocN_id()

◆ MEM_lockfree_recallocN_id()

◆ MEM_lockfree_reset_peak_memory()

void MEM_lockfree_reset_peak_memory ( void )

Definition at line 541 of file mallocn_lockfree_impl.cc.

References memory_usage_peak_reset().

Referenced by MEM_use_lockfree_allocator().

◆ MEM_lockfree_set_error_callback()

void MEM_lockfree_set_error_callback ( void(* func )(const char *))

Definition at line 515 of file mallocn_lockfree_impl.cc.

References error_callback.

Referenced by MEM_use_lockfree_allocator().

◆ MEM_lockfree_set_memory_debug()

void MEM_lockfree_set_memory_debug ( void )

Definition at line 525 of file mallocn_lockfree_impl.cc.

References malloc_debug_memset.

Referenced by MEM_use_lockfree_allocator().

◆ print_error() [1/2]

◆ print_error() [2/2]

static void print_error ( const char * message,
... )
static

Definition at line 96 of file mallocn_lockfree_impl.cc.

References print_error().

◆ report_error_on_address()

Variable Documentation

◆ error_callback

void(* error_callback) (const char *) ( const char * ) = nullptr
static

Definition at line 50 of file mallocn_lockfree_impl.cc.

Referenced by MEM_lockfree_set_error_callback(), and print_error().

◆ malloc_debug_memset

bool malloc_debug_memset = false
static