My Project
programmer's documentation
|
#include "cs_defs.h"
#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"
Functions | |
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... | |
bft_error_handler_t * | bft_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... | |
int | bft_mem_have_memalign (void) |
Indicate if a memory aligned allocation variant is available. More... | |
Base memory allocation wrappers with optional tracing.
The memory managment function provided here provide optional logging, and tracking of non-freed pointers.
Since in most of the intended applications, failure to allocate memory is considered fatal, failed allocations from these functions are considedered as errors, which are fatal by default but can be handled differently if an appropriate error handler is defined. So additional checking of the return values in the calling code is not needed.
The functions provided here are otherwise based on the matching C library functions.
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_error_handler_t* bft_mem_error_handler_get | ( | void | ) |
Returns the error handler associated with the bft_mem_...() functions.
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).
handler | pointer to the error handler function [in]. |
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.
[in] | ptr | pointer to previous memory location (if NULL, bft_alloc() called). |
[in] | var_name | allocated variable name string |
[in] | file_name | name of calling source file |
[in] | line_num | line number in calling source file |
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.
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.
log_file_name | name of optional log_file (if NULL, no log). |
int bft_mem_initialized | ( | void | ) |
Indicates if bft_mem_...() functions are initialized.
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.
[in] | ni | number of elements. |
[in] | size | element size. |
[in] | var_name | allocated variable name string. |
[in] | file_name | name of calling source file. |
[in] | line_num | line number in calling source file. |
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.
[in] | alignment | alignment. |
[in] | ni | number of elements. |
[in] | size | element size. |
[in] | var_name | allocated variable name string. |
[in] | file_name | name of calling source file. |
[in] | line_num | line number in calling source file. |
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.
[in] | ptr | pointer to previous memory location (if NULL, bft_alloc() called). |
[in] | ni | number of elements. |
[in] | size | element size. |
[in] | var_name | allocated variable name string. |
[in] | file_name | name of calling source file. |
[in] | line_num | line number in calling source file. |
size_t bft_mem_size_current | ( | void | ) |
Return current theoretical dynamic memory allocated.
size_t bft_mem_size_max | ( | void | ) |
Return maximum theoretical dynamic memory allocated.