SimGrid  3.18
Versatile Simulation of Distributed Systems
mallocator.c File Reference
#include "xbt/mallocator.h"
#include "mallocator_private.h"
#include "simgrid/modelchecker.h"
#include "src/internal_config.h"
#include "xbt/asserts.h"
#include "xbt/sysdep.h"

Functions

 XBT_LOG_NEW_DEFAULT_SUBCATEGORY (xbt_mallocator, xbt, "Mallocators")
 
static void lock_reset (xbt_mallocator_t m)
 
static void lock_acquire (xbt_mallocator_t m)
 
static void lock_release (xbt_mallocator_t m)
 
void xbt_mallocator_initialization_is_done (int protect)
 This function must be called once the framework configuration is done. More...
 
static int xbt_mallocator_is_active (void)
 used by the module to know if it's time to activate the mallocators yet More...
 
xbt_mallocator_t xbt_mallocator_new (int size, pvoid_f_void_t new_f, void_f_pvoid_t free_f, void_f_pvoid_t reset_f)
 Constructor. More...
 
void xbt_mallocator_free (xbt_mallocator_t m)
 Destructor. More...
 
voidxbt_mallocator_get (xbt_mallocator_t m)
 Extract an object from a mallocator. More...
 
void xbt_mallocator_release (xbt_mallocator_t m, void *object)
 Push an object into a mallocator. More...
 

Variables

static int initialization_done = 0
 Implementation note on the mallocators: More...
 

Function Documentation

◆ XBT_LOG_NEW_DEFAULT_SUBCATEGORY()

XBT_LOG_NEW_DEFAULT_SUBCATEGORY ( xbt_mallocator  ,
xbt  ,
"Mallocators"   
)

◆ lock_reset()

static void lock_reset ( xbt_mallocator_t  m)
inlinestatic

◆ lock_acquire()

static void lock_acquire ( xbt_mallocator_t  m)
inlinestatic

◆ lock_release()

static void lock_release ( xbt_mallocator_t  m)
inlinestatic

◆ xbt_mallocator_is_active()

static int xbt_mallocator_is_active ( void  )
inlinestatic

used by the module to know if it's time to activate the mallocators yet

Variable Documentation

◆ initialization_done

int initialization_done = 0
static

Implementation note on the mallocators:

Mallocators and memory mess introduced by model-checking do not mix well together: the mallocator will give standard memory when we are using raw memory (so these blocks are killed on restore) and the contrary (so these blocks will leak across restores).

In addition, model-checking is activated when the command-line arguments are parsed, at the beginning of main, while most of the mallocators are created during the constructor functions launched from xbt_preinit, before the beginning of the main function.

We want the code as fast as possible when they are active while we can deal with a little slow-down when they are inactive. So we start the mallocators as inactive. When they are so, they check at each use whether they should switch to the fast active mode or should stay in inactive mode. Finally, we give external elements a way to switch them all to the active mode (through xbt_mallocator_initialization_is_done).

This design avoids to store all mallocators somewhere for later conversion, which would be hard to achieve provided that all our data structures use some mallocators internally...