mem

Overview

Collection of function for dynamic memory alloction and macros for memory sizes.

Types and Definitions

cGib_

#define cGib_ 1073741824

Number of bytes for one gibibyte. 1073741824 bytes are required to store one gibibyte.

cMib_

#define cMib_ 1048576

Number of bytes for one mebibyte. 1048576 bytes are required to store one mebibyte.

cKib_

#define cKib_ 1024

Number of bytes for one kibibyte. 1024 bytes are required to store one kibibyte.

Functions

dynamic memory allocation

alloc_c

#define alloc_c_( Type )                                                       \
   alloc_c( sizeof_c_( Type ) )
void* alloc_c( int64_t size );

Allocates a block of memory and returns a pointer to the beginning of the zero-initialized block.

If the size is zero returns the function a NULL pointer.

alloc_array_c

#define alloc_array_c_( Number, Type )                                         \
   alloc_array_c( (Number), sizeof_c_( Type ) )
void* alloc_array_c( int64_t num, int64_t size );

Allocates a block of memory for an array of num elements, each of them size bytes long, and returns a pointer to the beginning of the zero-initialized block.

If num or the size is zero returns the function a NULL pointer.

free_all_c

#define free_all_c_( ... )                                                     \
   free_all_c( nargs_c_( __VA_ARGS__ ), __VA_ARGS__ )
void free_all_c( int n, ... );

Calls free on n pointer arguments(…​). It is recommended to use the macro function to count the numer of pointers automatically.

realloc_c

void* realloc_c( void* ptr, int64_t size );

Changes the size of an allocated memory block pointed by ptr. The function has three possible return values:

  • the value from ptr if it is possible to resize the memory in place

  • a pointer to a new memory block, the old memory block is moved to this location

  • a NULL pointer if size is zero or a reallocation fails

realloc_array_c

#define realloc_array_c_( Ptr, Number, Type )                                  \
   realloc_array_c( (Ptr), (Number), sizeof_c_( Type ) )
void realloc_array_c( void* ptr, int64_t num, int64_t size );

Changes the block of memory pointed by ptr for an array to store num elements, each of them size bytes long. The function has three possible return values:

  • the value from ptr if it is possible to resize the memory in place

  • a pointer to a new memory block, the old memory block is moved to this location

  • a NULL pointer if size is zero or a reallocation fails

general

buf_c_

#define buf_c_( Type )

Creates a pointer to a unutilized value of Type.

stack_mem_c_

#define stack_mem_c_( Size )

Allows to create a fix number of bytes on the stack.

ref_c_

#define ref_c_( Type, Value )

Creates a const pointer to a Value.

sizeof_c_

#define sizeof_c_( Type )

Reuturns the storage size of a Type as int64_t.