8.2
general documentation
bft_mem.cpp File Reference
#include "cs_defs.h"
#include <map>
#include <assert.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "bft_error.h"
#include "bft_mem_usage.h"
#include "bft_mem.h"
#include "bft_printf.h"
+ Include dependency graph for bft_mem.cpp:

Functions

cs_mem_block_t bft_mem_get_block_info (const void *p_get)
 Return the cs_mem_block structure corresponding to a given allocated block. More...
 
cs_mem_block_t bft_mem_get_block_info_try (const void *p_get)
 Return the cs_mem_block structure corresponding to a given allocated block if available. More...
 
void bft_mem_update_block_info (const char *var_name, const char *file_name, int line_num, const cs_mem_block_t *old_block, const cs_mem_block_t *new_block)
 Log matching memory operation if logging is enabled. More...
 
void bft_mem_init (const char *log_file_name)
 Initialize memory handling. More...
 
void bft_mem_end (void)
 End memory handling. More...
 
int bft_mem_initialized (void)
 Indicates if bft_mem_...() functions are initialized. More...
 
void * bft_mem_malloc (size_t ni, size_t size, const char *var_name, const char *file_name, int line_num)
 Allocate memory for ni elements of size bytes. More...
 
void * bft_mem_realloc (void *ptr, size_t ni, size_t size, const char *var_name, const char *file_name, int line_num)
 Reallocate memory for ni elements of size bytes. More...
 
void * bft_mem_free (void *ptr, const char *var_name, const char *file_name, int line_num)
 Free allocated memory. More...
 
void * bft_mem_memalign (size_t alignment, size_t ni, size_t size, const char *var_name, const char *file_name, int line_num)
 Allocate aligned memory for ni elements of size bytes. More...
 
size_t bft_mem_size_current (void)
 Return current theoretical dynamic memory allocated. More...
 
size_t bft_mem_size_max (void)
 Return maximum theoretical dynamic memory allocated. More...
 
int bft_mem_have_memalign (void)
 Indicate if a memory aligned allocation variant is available. More...
 
bft_error_handler_tbft_mem_error_handler_get (void)
 Returns the error handler associated with the bft_mem_...() functions. More...
 
void bft_mem_error_handler_set (bft_error_handler_t *handler)
 Associates an error handler with the bft_mem_...() functions. More...
 
void bft_mem_alternative_set (bft_mem_realloc_t *realloc_func, bft_mem_free_t *free_func)
 

Function Documentation

◆ bft_mem_alternative_set()

void bft_mem_alternative_set ( bft_mem_realloc_t realloc_func,
bft_mem_free_t free_func 
)

◆ bft_mem_end()

void bft_mem_end ( void  )

End memory handling.

This function should be called after all other bft_mem_...() functions. In case of memory allocation logging, it writes final information to the log file and closes is.

◆ bft_mem_error_handler_get()

bft_error_handler_t* bft_mem_error_handler_get ( void  )

Returns the error handler associated with the bft_mem_...() functions.

Returns
pointer to the error handler function.

◆ bft_mem_error_handler_set()

void bft_mem_error_handler_set ( bft_error_handler_t handler)

Associates an error handler with the bft_mem_...() functions.

With the default error handler, an error message is output to stderr, (after bft_print_flush() is called), and the general error handler used by bft_error() is then called (which results in the termination of the current process or process group).

Parameters
handlerpointer to the error handler function [in].

◆ bft_mem_free()

void* bft_mem_free ( void *  ptr,
const char *  var_name,
const char *  file_name,
int  line_num 
)

Free allocated memory.

This function calls free(), but adds tracing capabilities, and automatically calls the bft_error() errorhandler if it fails to free the corresponding memory. In case of a NULL pointer argument, the function simply returns.

Parameters
[in]ptrpointer to previous memory location (if NULL, bft_alloc() called).
[in]var_nameallocated variable name string
[in]file_namename of calling source file
[in]line_numline number in calling source file
Returns
NULL pointer.

◆ bft_mem_get_block_info()

cs_mem_block_t bft_mem_get_block_info ( const void *  p_get)

Return the cs_mem_block structure corresponding to a given allocated block.

Parameters
[in]p_getallocated block's start adress.
Returns
corresponding cs_mem_block structure.

◆ bft_mem_get_block_info_try()

cs_mem_block_t bft_mem_get_block_info_try ( const void *  p_get)

Return the cs_mem_block structure corresponding to a given allocated block if available.

If no block info is available, return block with null pointers and zero size.

Parameters
[in]p_getallocated block's start adress.
Returns
corresponding cs_mem_block structure.

◆ bft_mem_have_memalign()

int bft_mem_have_memalign ( void  )

Indicate if a memory aligned allocation variant is available.

If no such function is available, bft_mem_memalign() will always fail.

Returns
1 if memory aligned allocation is possible, 0 otherwise.

◆ bft_mem_init()

void bft_mem_init ( const char *  log_file_name)

Initialize memory handling.

This function should be called before any other bft_mem_...() function. To activate memory allocation logging, a logfile name should be given as an argument. The resulting file will be a regular, local file. If this file cannot be opened for some reason, logging is silently de-activated.

Parameters
log_file_namename of optional log_file (if NULL, no log).

◆ bft_mem_initialized()

int bft_mem_initialized ( void  )

Indicates if bft_mem_...() functions are initialized.

Returns
1 if bft_mem_init has been called, 0 otherwise.

◆ bft_mem_malloc()

void* bft_mem_malloc ( size_t  ni,
size_t  size,
const char *  var_name,
const char *  file_name,
int  line_num 
)

Allocate memory for ni elements of size bytes.

This function calls malloc(), but adds tracing capabilities, and automatically calls the bft_error() errorhandler if it fails to allocate the required memory.

Allocation couting and logging to trace file will be done if both required by the bft_mem_init options and if file_name != nullptr. If required but file_name == nullptr, it must be handled by the caller, using bft_mem_log_mem_op.

Parameters
[in]ninumber of elements.
[in]sizeelement size.
[in]var_nameallocated variable name string.
[in]file_namename of calling source file.
[in]line_numline number in calling source file.
Returns
pointer to allocated memory.

◆ bft_mem_memalign()

void* bft_mem_memalign ( size_t  alignment,
size_t  ni,
size_t  size,
const char *  var_name,
const char *  file_name,
int  line_num 
)

Allocate aligned memory for ni elements of size bytes.

This function calls posix_memalign() if available, but adds tracing capabilities, and automatically calls the bft_error() errorhandler if it fails to allocate the required memory.

The associated function bft_mem_have_memalign() indicates if this type of allocation may be used on this system.

Parameters
[in]alignmentalignment.
[in]ninumber of elements.
[in]sizeelement size.
[in]var_nameallocated variable name string.
[in]file_namename of calling source file.
[in]line_numline number in calling source file.
Returns
pointer to allocated memory.

◆ bft_mem_realloc()

void* bft_mem_realloc ( void *  ptr,
size_t  ni,
size_t  size,
const char *  var_name,
const char *  file_name,
int  line_num 
)

Reallocate memory for ni elements of size bytes.

This function calls realloc(), but adds tracing capabilities, and automatically calls the bft_error() errorhandler if it fails to allocate the required memory.

Parameters
[in]ptrpointer to previous memory location (if NULL, bft_alloc() called).
[in]ninumber of elements.
[in]sizeelement size.
[in]var_nameallocated variable name string.
[in]file_namename of calling source file.
[in]line_numline number in calling source file.
Returns
pointer to reallocated memory.

◆ bft_mem_size_current()

size_t bft_mem_size_current ( void  )

Return current theoretical dynamic memory allocated.

Returns
current memory handled through bft_mem_...() (in kB).

◆ bft_mem_size_max()

size_t bft_mem_size_max ( void  )

Return maximum theoretical dynamic memory allocated.

Returns
maximum memory handled through bft_mem_...() (in kB).

◆ bft_mem_update_block_info()

void bft_mem_update_block_info ( const char *  var_name,
const char *  file_name,
int  line_num,
const cs_mem_block_t old_block,
const cs_mem_block_t new_block 
)

Log matching memory operation if logging is enabled.

Parameters
[in]var_nameallocated variable name string.
[in]file_namename of calling source file.
[in]line_numline number in calling source file.
[in]old_blockpointer to old block info, if present
[in]new_blockpointer to new block info, if present