Blender V5.0
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.

Macros

#define MEMHEAD_FROM_PTR(ptr)
#define PTR_FROM_MEMHEAD(memhead)
#define MEMHEAD_ALIGNED_FROM_PTR(ptr)
#define MEMHEAD_IS_ALIGNED(memhead)
#define MEMHEAD_IS_FROM_CPP_NEW(memhead)
#define MEMHEAD_LEN(memhead)

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)
static void * mem_lockfree_malloc_arrayN_aligned (const size_t len, const size_t size, const size_t alignment, const char *str, size_t &r_bytes_num)
void * MEM_lockfree_malloc_arrayN_aligned (const size_t len, const size_t size, const size_t alignment, const char *str)
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 *, const char *)

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

#define MEMHEAD_ALIGNED_FROM_PTR ( ptr)
Value:
(((MemHeadAligned *)ptr) - 1)
PointerRNA * ptr
Definition wm_files.cc:4238

Definition at line 76 of file mallocn_lockfree_impl.cc.

Referenced by MEM_lockfree_dupallocN(), MEM_lockfree_freeN(), MEM_lockfree_reallocN_id(), MEM_lockfree_recallocN_id(), and report_error_on_address().

◆ MEMHEAD_FROM_PTR

◆ MEMHEAD_IS_ALIGNED

#define MEMHEAD_IS_ALIGNED ( memhead)

◆ MEMHEAD_IS_FROM_CPP_NEW

#define MEMHEAD_IS_FROM_CPP_NEW ( memhead)

◆ MEMHEAD_LEN

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

Definition at line 79 of file mallocn_lockfree_impl.cc.

Referenced by MEM_lockfree_allocN_len(), MEM_lockfree_freeN(), and report_error_on_address().

◆ PTR_FROM_MEMHEAD

#define PTR_FROM_MEMHEAD ( memhead)
Value:
(memhead + 1)

Definition at line 75 of file mallocn_lockfree_impl.cc.

Referenced by MEM_lockfree_callocN(), MEM_lockfree_mallocN(), and MEM_lockfree_mallocN_aligned().

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 60 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 *))

◆ 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 )

◆ MEM_lockfree_consistency_check()

bool MEM_lockfree_consistency_check ( void )

◆ MEM_lockfree_dupallocN()

◆ MEM_lockfree_freeN()

◆ MEM_lockfree_get_memory_blocks_in_use()

uint MEM_lockfree_get_memory_blocks_in_use ( void )

◆ MEM_lockfree_get_memory_in_use()

size_t MEM_lockfree_get_memory_in_use ( void )

◆ MEM_lockfree_get_peak_memory()

size_t MEM_lockfree_get_peak_memory ( void )

◆ MEM_lockfree_malloc_arrayN()

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

◆ MEM_lockfree_malloc_arrayN_aligned()

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

Definition at line 487 of file mallocn_lockfree_impl.cc.

References len, mem_lockfree_malloc_arrayN_aligned(), size(), and str.

◆ mem_lockfree_malloc_arrayN_aligned()

void * mem_lockfree_malloc_arrayN_aligned ( const size_t len,
const size_t size,
const size_t alignment,
const char * str,
size_t & r_bytes_num )
static

◆ MEM_lockfree_mallocN()

◆ MEM_lockfree_mallocN_aligned()

◆ MEM_lockfree_name_ptr()

const char * MEM_lockfree_name_ptr ( void * vmemh)

Definition at line 581 of file mallocn_lockfree_impl.cc.

Referenced by MEM_use_lockfree_allocator().

◆ MEM_lockfree_name_ptr_set()

void MEM_lockfree_name_ptr_set ( void * vmemh,
const char * str )

Definition at line 590 of file mallocn_lockfree_impl.cc.

Referenced by MEM_use_lockfree_allocator().

◆ MEM_lockfree_printmemlist()

void MEM_lockfree_printmemlist ( void )

◆ MEM_lockfree_printmemlist_pydict()

void MEM_lockfree_printmemlist_pydict ( void )

◆ MEM_lockfree_printmemlist_stats()

void MEM_lockfree_printmemlist_stats ( void )

◆ MEM_lockfree_reallocN_id()

◆ MEM_lockfree_recallocN_id()

◆ MEM_lockfree_reset_peak_memory()

void MEM_lockfree_reset_peak_memory ( void )

◆ MEM_lockfree_set_error_callback()

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

◆ MEM_lockfree_set_memory_debug()

void MEM_lockfree_set_memory_debug ( void )

◆ print_error() [1/2]

◆ print_error() [2/2]

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

Definition at line 100 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 54 of file mallocn_lockfree_impl.cc.

Referenced by print_error().

◆ malloc_debug_memset

bool malloc_debug_memset = false
static

Definition at line 52 of file mallocn_lockfree_impl.cc.