Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Data Structures | Macros | Typedefs | Functions
mymalloc.cc File Reference
#include <sys/types.h>
#include <iostream>
#include "tls.hh"
#include <stdio.h>
#include <errno.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/param.h>

Go to the source code of this file.

Data Structures

struct  mallinfo
 
struct  malloc_chunk
 
struct  malloc_tree_chunk
 
struct  malloc_segment
 
struct  malloc_state
 
struct  malloc_params
 

Macros

#define MSPACES   1
 
#define DLMALLOC_VERSION   20804
 
#define SPIN_LOCKS_AVAILABLE   0
 
#define MAX_SIZE_T   (~(size_t)0)
 
#define ONLY_MSPACES   0 /* define to a value */
 
#define MALLOC_ALIGNMENT   ((size_t)8U)
 
#define FOOTERS   0
 
#define ABORT   abort()
 
#define ABORT_ON_ASSERT_FAILURE   1
 
#define PROCEED_ON_ERROR   0
 
#define USE_LOCKS   0
 
#define USE_SPIN_LOCKS   0
 
#define INSECURE   0
 
#define HAVE_MMAP   1
 
#define MMAP_CLEARS   1
 
#define HAVE_MREMAP   0
 
#define MALLOC_FAILURE_ACTION   errno = ENOMEM;
 
#define HAVE_MORECORE   1
 
#define MORECORE_DEFAULT   sbrk
 
#define MORECORE_CONTIGUOUS   1
 
#define DEFAULT_GRANULARITY   (0) /* 0 means to compute in init_mparams */
 
#define DEFAULT_TRIM_THRESHOLD   ((size_t)2U * (size_t)1024U * (size_t)1024U)
 
#define DEFAULT_MMAP_THRESHOLD   ((size_t)256U * (size_t)1024U)
 
#define MAX_RELEASE_CHECK_RATE   4095
 
#define USE_BUILTIN_FFS   0
 
#define USE_DEV_RANDOM   0
 
#define NO_MALLINFO   0
 
#define MALLINFO_FIELD_TYPE   size_t
 
#define NO_SEGMENT_TRAVERSAL   0
 
#define M_TRIM_THRESHOLD   (-1)
 
#define M_GRANULARITY   (-2)
 
#define M_MMAP_THRESHOLD   (-3)
 
#define STRUCT_MALLINFO_DECLARED   1
 
#define NOINLINE
 
#define FORCEINLINE
 
#define dlcalloc   mycalloc
 
#define dlfree   myfree
 
#define dlmalloc   mymalloc
 
#define dlmemalign   mymemalign
 
#define dlrealloc   myrealloc
 
#define dlvalloc   myvalloc
 
#define dlpvalloc   mypvalloc
 
#define dlmallinfo   mymallinfo
 
#define dlmallopt   mymallopt
 
#define dlmalloc_trim   mymalloc_trim
 
#define dlmalloc_stats   mymalloc_stats
 
#define dlmalloc_usable_size   mymalloc_usable_size
 
#define dlmalloc_footprint   mymalloc_footprint
 
#define dlmalloc_max_footprint   mymalloc_max_footprint
 
#define dlindependent_calloc   myindependent_calloc
 
#define dlindependent_comalloc   myindependent_comalloc
 
#define assert(x)
 
#define DEBUG   0
 
#define malloc_getpagesize   ((size_t)4096U)
 
#define SIZE_T_SIZE   (sizeof(size_t))
 
#define SIZE_T_BITSIZE   (sizeof(size_t) << 3)
 
#define SIZE_T_ZERO   ((size_t)0)
 
#define SIZE_T_ONE   ((size_t)1)
 
#define SIZE_T_TWO   ((size_t)2)
 
#define SIZE_T_FOUR   ((size_t)4)
 
#define TWO_SIZE_T_SIZES   (SIZE_T_SIZE<<1)
 
#define FOUR_SIZE_T_SIZES   (SIZE_T_SIZE<<2)
 
#define SIX_SIZE_T_SIZES   (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES)
 
#define HALF_MAX_SIZE_T   (MAX_SIZE_T / 2U)
 
#define CHUNK_ALIGN_MASK   (MALLOC_ALIGNMENT - SIZE_T_ONE)
 
#define is_aligned(A)   (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0)
 
#define align_offset(A)
 
#define MFAIL   ((void*)(MAX_SIZE_T))
 
#define CMFAIL   ((char*)(MFAIL)) /* defined for convenience */
 
#define MUNMAP_DEFAULT(a, s)   munmap((a), (s))
 
#define MMAP_PROT   (PROT_READ|PROT_WRITE)
 
#define MMAP_FLAGS   (MAP_PRIVATE)
 
#define MMAP_DEFAULT(s)
 
#define DIRECT_MMAP_DEFAULT(s)   MMAP_DEFAULT(s)
 
#define CALL_MORECORE(S)   MORECORE_DEFAULT(S)
 
#define USE_MMAP_BIT   (SIZE_T_ONE)
 
#define CALL_MMAP(s)   MMAP_DEFAULT(s)
 
#define CALL_MUNMAP(a, s)   MUNMAP_DEFAULT((a), (s))
 
#define CALL_DIRECT_MMAP(s)   DIRECT_MMAP_DEFAULT(s)
 
#define CALL_MREMAP(addr, osz, nsz, mv)   MFAIL
 
#define USE_NONCONTIGUOUS_BIT   (4U)
 
#define EXTERN_BIT   (8U)
 
#define USE_LOCK_BIT   (0U)
 
#define INITIAL_LOCK(l)
 
#define ACQUIRE_MALLOC_GLOBAL_LOCK()
 
#define RELEASE_MALLOC_GLOBAL_LOCK()
 
#define MCHUNK_SIZE   (sizeof(mchunk))
 
#define CHUNK_OVERHEAD   (SIZE_T_SIZE)
 
#define MMAP_CHUNK_OVERHEAD   (TWO_SIZE_T_SIZES)
 
#define MMAP_FOOT_PAD   (FOUR_SIZE_T_SIZES)
 
#define MIN_CHUNK_SIZE   ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK)
 
#define chunk2mem(p)   ((void*)((char*)(p) + TWO_SIZE_T_SIZES))
 
#define mem2chunk(mem)   ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES))
 
#define align_as_chunk(A)   (mchunkptr)((A) + align_offset(chunk2mem(A)))
 
#define MAX_REQUEST   ((-MIN_CHUNK_SIZE) << 2)
 
#define MIN_REQUEST   (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE)
 
#define pad_request(req)   (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK)
 
#define request2size(req)   (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req))
 
#define PINUSE_BIT   (SIZE_T_ONE)
 
#define CINUSE_BIT   (SIZE_T_TWO)
 
#define FLAG4_BIT   (SIZE_T_FOUR)
 
#define INUSE_BITS   (PINUSE_BIT|CINUSE_BIT)
 
#define FLAG_BITS   (PINUSE_BIT|CINUSE_BIT|FLAG4_BIT)
 
#define FENCEPOST_HEAD   (INUSE_BITS|SIZE_T_SIZE)
 
#define cinuse(p)   ((p)->head & CINUSE_BIT)
 
#define pinuse(p)   ((p)->head & PINUSE_BIT)
 
#define is_inuse(p)   (((p)->head & INUSE_BITS) != PINUSE_BIT)
 
#define is_mmapped(p)   (((p)->head & INUSE_BITS) == 0)
 
#define chunksize(p)   ((p)->head & ~(FLAG_BITS))
 
#define clear_pinuse(p)   ((p)->head &= ~PINUSE_BIT)
 
#define chunk_plus_offset(p, s)   ((mchunkptr)(((char*)(p)) + (s)))
 
#define chunk_minus_offset(p, s)   ((mchunkptr)(((char*)(p)) - (s)))
 
#define next_chunk(p)   ((mchunkptr)( ((char*)(p)) + ((p)->head & ~FLAG_BITS)))
 
#define prev_chunk(p)   ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) ))
 
#define next_pinuse(p)   ((next_chunk(p)->head) & PINUSE_BIT)
 
#define get_foot(p, s)   (((mchunkptr)((char*)(p) + (s)))->prev_foot)
 
#define set_foot(p, s)   (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s))
 
#define set_size_and_pinuse_of_free_chunk(p, s)   ((p)->head = (s|PINUSE_BIT), set_foot(p, s))
 
#define set_free_with_pinuse(p, s, n)   (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s))
 
#define overhead_for(p)   (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD)
 
#define calloc_must_clear(p)   (!is_mmapped(p))
 
#define leftmost_child(t)   ((t)->child[0] != 0? (t)->child[0] : (t)->child[1])
 
#define is_mmapped_segment(S)   ((S)->sflags & USE_MMAP_BIT)
 
#define is_extern_segment(S)   ((S)->sflags & EXTERN_BIT)
 
#define NSMALLBINS   (32U)
 
#define NTREEBINS   (32U)
 
#define SMALLBIN_SHIFT   (3U)
 
#define SMALLBIN_WIDTH   (SIZE_T_ONE << SMALLBIN_SHIFT)
 
#define TREEBIN_SHIFT   (8U)
 
#define MIN_LARGE_SIZE   (SIZE_T_ONE << TREEBIN_SHIFT)
 
#define MAX_SMALL_SIZE   (MIN_LARGE_SIZE - SIZE_T_ONE)
 
#define MAX_SMALL_REQUEST   (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD)
 
#define ensure_initialization()   (void)(mparams.magic != 0 || init_mparams())
 
#define gm   (&_gm_)
 
#define is_global(M)   ((M) == &_gm_)
 
#define is_initialized(M)   ((M)->top != 0)
 
#define use_lock(M)   ((M)->mflags & USE_LOCK_BIT)
 
#define enable_lock(M)   ((M)->mflags |= USE_LOCK_BIT)
 
#define disable_lock(M)   ((M)->mflags &= ~USE_LOCK_BIT)
 
#define use_mmap(M)   ((M)->mflags & USE_MMAP_BIT)
 
#define enable_mmap(M)   ((M)->mflags |= USE_MMAP_BIT)
 
#define disable_mmap(M)   ((M)->mflags &= ~USE_MMAP_BIT)
 
#define use_noncontiguous(M)   ((M)->mflags & USE_NONCONTIGUOUS_BIT)
 
#define disable_contiguous(M)   ((M)->mflags |= USE_NONCONTIGUOUS_BIT)
 
#define set_lock(M, L)
 
#define page_align(S)   (((S) + (mparams.page_size - SIZE_T_ONE)) & ~(mparams.page_size - SIZE_T_ONE))
 
#define granularity_align(S)
 
#define mmap_align(S)   page_align(S)
 
#define SYS_ALLOC_PADDING   (TOP_FOOT_SIZE + MALLOC_ALIGNMENT)
 
#define is_page_aligned(S)   (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0)
 
#define is_granularity_aligned(S)   (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0)
 
#define segment_holds(S, A)   ((char*)(A) >= S->base && (char*)(A) < S->base + S->size)
 
#define should_trim(M, s)   ((s) > (M)->trim_check)
 
#define TOP_FOOT_SIZE   (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE)
 
#define PREACTION(M)   (0)
 
#define POSTACTION(M)
 
#define CORRUPTION_ERROR_ACTION(m)   ABORT
 
#define USAGE_ERROR_ACTION(m, p)   ABORT
 
#define check_free_chunk(M, P)
 
#define check_inuse_chunk(M, P)
 
#define check_malloced_chunk(M, P, N)
 
#define check_mmapped_chunk(M, P)
 
#define check_malloc_state(M)
 
#define check_top_chunk(M, P)
 
#define is_small(s)   (((s) >> SMALLBIN_SHIFT) < NSMALLBINS)
 
#define small_index(s)   ((s) >> SMALLBIN_SHIFT)
 
#define small_index2size(i)   ((i) << SMALLBIN_SHIFT)
 
#define MIN_SMALL_INDEX   (small_index(MIN_CHUNK_SIZE))
 
#define smallbin_at(M, i)   ((sbinptr)((char*)&((M)->smallbins[(i)<<1])))
 
#define treebin_at(M, i)   (&((M)->treebins[i]))
 
#define compute_tree_index(S, I)
 
#define bit_for_tree_index(i)   (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2)
 
#define leftshift_for_tree_index(i)
 
#define minsize_for_tree_index(i)
 
#define idx2bit(i)   ((binmap_t)(1) << (i))
 
#define mark_smallmap(M, i)   ((M)->smallmap |= idx2bit(i))
 
#define clear_smallmap(M, i)   ((M)->smallmap &= ~idx2bit(i))
 
#define smallmap_is_marked(M, i)   ((M)->smallmap & idx2bit(i))
 
#define mark_treemap(M, i)   ((M)->treemap |= idx2bit(i))
 
#define clear_treemap(M, i)   ((M)->treemap &= ~idx2bit(i))
 
#define treemap_is_marked(M, i)   ((M)->treemap & idx2bit(i))
 
#define least_bit(x)   ((x) & -(x))
 
#define left_bits(x)   ((x<<1) | -(x<<1))
 
#define same_or_left_bits(x)   ((x) | -(x))
 
#define compute_bit2idx(X, I)
 
#define ok_address(M, a)   ((char*)(a) >= (M)->least_addr)
 
#define ok_next(p, n)   ((char*)(p) < (char*)(n))
 
#define ok_inuse(p)   is_inuse(p)
 
#define ok_pinuse(p)   pinuse(p)
 
#define ok_magic(M)   (1)
 
#define RTCHECK(e)   (e)
 
#define mark_inuse_foot(M, p, s)
 
#define set_inuse(M, p, s)
 
#define set_inuse_and_pinuse(M, p, s)
 
#define set_size_and_pinuse_of_inuse_chunk(M, p, s)   ((p)->head = (s|PINUSE_BIT|CINUSE_BIT))
 
#define insert_small_chunk(M, P, S)
 
#define unlink_small_chunk(M, P, S)
 
#define unlink_first_small_chunk(M, B, P, I)
 
#define replace_dv(M, P, S)
 
#define insert_large_chunk(M, X, S)
 
#define unlink_large_chunk(M, X)
 
#define insert_chunk(M, P, S)
 
#define unlink_chunk(M, P, S)
 
#define internal_malloc(m, b)   (m == gm)? dlmalloc(b) : mspace_malloc(m, b)
 
#define internal_free(m, mem)   if (m == gm) dlfree(mem); else mspace_free(m,mem);
 
#define fm   gm
 

Typedefs

typedef voidmspace
 
typedef struct malloc_chunk mchunk
 
typedef struct malloc_chunkmchunkptr
 
typedef struct malloc_chunksbinptr
 
typedef unsigned int bindex_t
 
typedef unsigned int binmap_t
 
typedef unsigned int flag_t
 
typedef struct malloc_tree_chunk tchunk
 
typedef struct malloc_tree_chunktchunkptr
 
typedef struct malloc_tree_chunktbinptr
 
typedef struct malloc_segment msegment
 
typedef struct malloc_segmentmsegmentptr
 
typedef struct malloc_statemstate
 

Functions

voiddlmalloc (size_t)
 
void dlfree (void *)
 
voiddlcalloc (size_t, size_t)
 
voiddlrealloc (void *, size_t)
 
voiddlmemalign (size_t, size_t)
 
voiddlvalloc (size_t)
 
int dlmallopt (int, int)
 
size_t dlmalloc_footprint (void)
 
size_t dlmalloc_max_footprint (void)
 
struct mallinfo dlmallinfo (void)
 
void ** dlindependent_calloc (size_t, size_t, void **)
 
void ** dlindependent_comalloc (size_t, size_t *, void **)
 
voiddlpvalloc (size_t)
 
int dlmalloc_trim (size_t)
 
void dlmalloc_stats (void)
 
size_t dlmalloc_usable_size (void *)
 
mspace create_mspace (size_t capacity, int locked)
 
size_t destroy_mspace (mspace msp)
 
mspace create_mspace_with_base (void *base, size_t capacity, int locked)
 
int mspace_track_large_chunks (mspace msp, int enable)
 
voidmspace_malloc (mspace msp, size_t bytes)
 
void mspace_free (mspace msp, void *mem)
 
voidmspace_realloc (mspace msp, void *mem, size_t newsize)
 
voidmspace_calloc (mspace msp, size_t n_elements, size_t elem_size)
 
voidmspace_memalign (mspace msp, size_t alignment, size_t bytes)
 
void ** mspace_independent_calloc (mspace msp, size_t n_elements, size_t elem_size, void *chunks[])
 
void ** mspace_independent_comalloc (mspace msp, size_t n_elements, size_t sizes[], void *chunks[])
 
size_t mspace_footprint (mspace msp)
 
size_t mspace_max_footprint (mspace msp)
 
struct mallinfo mspace_mallinfo (mspace msp)
 
size_t mspace_usable_size (void *mem)
 
void mspace_malloc_stats (mspace msp)
 
int mspace_trim (mspace msp, size_t pad)
 
int mspace_mallopt (int, int)
 
void ** dlindependent_calloc (size_t n_elements, size_t elem_size, void *chunks[])
 
void ** dlindependent_comalloc (size_t n_elements, size_t sizes[], void *chunks[])
 

Macro Definition Documentation

#define ABORT   abort()

Definition at line 566 of file mymalloc.cc.

#define ABORT_ON_ASSERT_FAILURE   1

Definition at line 569 of file mymalloc.cc.

#define ACQUIRE_MALLOC_GLOBAL_LOCK ( )

Definition at line 1915 of file mymalloc.cc.

#define align_as_chunk (   A)    (mchunkptr)((A) + align_offset(chunk2mem(A)))

Definition at line 2094 of file mymalloc.cc.

#define align_offset (   A)
Value:
((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\
#define CHUNK_ALIGN_MASK
Definition: mymalloc.cc:1456
#define MALLOC_ALIGNMENT
Definition: mymalloc.cc:560

Definition at line 1462 of file mymalloc.cc.

#define assert (   x)

Definition at line 1309 of file mymalloc.cc.

Referenced by G4VoxelLimits::AddLimit(), addThread(), CLHEP::sp::abstract_ctrl_block::class_invariant(), G4VUserDetectorConstruction::CloneF(), G4VUserDetectorConstruction::CloneSD(), Run::ComputeStatistics(), G4WorkerRunManager::ConstructScoringWorlds(), G4VisManager::CurrentTrajDrawModel(), G4MagneticFieldModel::DescribeYourselfTo(), CLHEP::sp::abstract_ctrl_block::destroy(), G4VisManager::DispatchToModel(), dlmalloc(), G4TrajectoryDrawByOriginVolume::Draw(), G4TrajectoryDrawByAttribute::Draw(), CLibSymbolInfo::DumpSymbols(), ElectronRunAction::EndOfRunAction(), G4TrajectoryOriginVolumeFilter::Evaluate(), tbbTask::execute(), FinishDetection(), finishtracer(), G4AtomicShells::GetBindingEnergy(), G4VTrajectoryModel::GetContext(), G4AttFilterUtils::GetNewFilter(), G4AtomicShells::GetNumberOfElectrons(), G4AtomicShells::GetNumberOfShells(), G4SandiaTable::GetSandiaCofForMaterial(), G4SandiaTable::GetSandiaCofForMaterialPAI(), G4SandiaTable::GetSandiaCofPerAtom(), G4SandiaTable::GetSandiaMatTable(), G4SandiaTable::GetSandiaMatTablePAI(), G4AtomicShells::GetTotalBindingEnergy(), G4SandiaTable::GetZtoA(), insertAddress(), mspace_malloc(), CLHEP::shared_ptr< T >::operator*(), CLHEP::shared_ptr< T >::operator->(), CLHEP::RandGeneral::put(), ElectronRun::RecordEvent(), G4VisListManager< T >::Register(), G4ITModelHandler::RegisterModel(), CLHEP::shared_ptr< T >::reset(), G4VoxelSafety::SafetyForVoxelHeader(), G4ITModelManager::SetModel(), G4ITModelHandler::SetModel(), G4VisCommandListManagerList< Manager >::SetNewValue(), G4VisCommandModelCreate< Factory >::SetNewValue(), G4VisCommandListManagerSelect< Manager >::SetNewValue(), G4VisCommandManagerMode< Manager >::SetNewValue(), CLHEP::NonRandomEngine::setRandomSequence(), SingleSteps(), StartDetection(), startThreadTracers(), traceloop(), waitForAllTracers(), and XML_GetParsingStatus().

#define bit_for_tree_index (   i)    (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2)

Definition at line 2757 of file mymalloc.cc.

#define CALL_DIRECT_MMAP (   s)    DIRECT_MMAP_DEFAULT(s)

Definition at line 1583 of file mymalloc.cc.

#define CALL_MMAP (   s)    MMAP_DEFAULT(s)

Definition at line 1573 of file mymalloc.cc.

Referenced by create_mspace().

#define CALL_MORECORE (   S)    MORECORE_DEFAULT(S)

Define CALL_MORECORE

Definition at line 1558 of file mymalloc.cc.

#define CALL_MREMAP (   addr,
  osz,
  nsz,
  mv 
)    MFAIL

Define CALL_MREMAP

Definition at line 1606 of file mymalloc.cc.

#define CALL_MUNMAP (   a,
  s 
)    MUNMAP_DEFAULT((a), (s))

Definition at line 1578 of file mymalloc.cc.

Referenced by destroy_mspace(), dlfree(), and mspace_free().

#define calloc_must_clear (   p)    (!is_mmapped(p))

Definition at line 2167 of file mymalloc.cc.

Referenced by dlcalloc(), and mspace_calloc().

#define check_free_chunk (   M,
 
)

Definition at line 2651 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define check_inuse_chunk (   M,
 
)

Definition at line 2652 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define check_malloc_state (   M)

Definition at line 2655 of file mymalloc.cc.

#define check_malloced_chunk (   M,
  P,
  N 
)

Definition at line 2653 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define check_mmapped_chunk (   M,
 
)

Definition at line 2654 of file mymalloc.cc.

#define check_top_chunk (   M,
 
)

Definition at line 2656 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define chunk2mem (   p)    ((void*)((char*)(p) + TWO_SIZE_T_SIZES))

Definition at line 2091 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define CHUNK_ALIGN_MASK   (MALLOC_ALIGNMENT - SIZE_T_ONE)

Definition at line 1456 of file mymalloc.cc.

#define chunk_minus_offset (   p,
  s 
)    ((mchunkptr)(((char*)(p)) - (s)))

Definition at line 2140 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define CHUNK_OVERHEAD   (SIZE_T_SIZE)

Definition at line 2078 of file mymalloc.cc.

#define chunk_plus_offset (   p,
  s 
)    ((mchunkptr)(((char*)(p)) + (s)))

Definition at line 2139 of file mymalloc.cc.

Referenced by dlfree(), dlmalloc(), mspace_free(), and mspace_malloc().

#define chunksize (   p)    ((p)->head & ~(FLAG_BITS))
#define cinuse (   p)    ((p)->head & CINUSE_BIT)

Definition at line 2129 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define CINUSE_BIT   (SIZE_T_TWO)

Definition at line 2120 of file mymalloc.cc.

#define clear_pinuse (   p)    ((p)->head &= ~PINUSE_BIT)

Definition at line 2136 of file mymalloc.cc.

#define clear_smallmap (   M,
 
)    ((M)->smallmap &= ~idx2bit(i))

Definition at line 2778 of file mymalloc.cc.

#define clear_treemap (   M,
 
)    ((M)->treemap &= ~idx2bit(i))

Definition at line 2782 of file mymalloc.cc.

#define CMFAIL   ((char*)(MFAIL)) /* defined for convenience */

Definition at line 1477 of file mymalloc.cc.

Referenced by create_mspace().

#define compute_bit2idx (   X,
 
)
Value:
{\
unsigned int Y = X - 1;\
unsigned int K = Y >> (16-4) & 16;\
unsigned int N = K; Y >>= K;\
N += K = Y >> (8-3) & 8; Y >>= K;\
N += K = Y >> (4-2) & 4; Y >>= K;\
N += K = Y >> (2-1) & 2; Y >>= K;\
N += K = Y >> (1-0) & 1; Y >>= K;\
I = (bindex_t)(N + Y);\
}
unsigned int bindex_t
Definition: mymalloc.cc:2067
**D E S C R I P T I O N

Definition at line 2824 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define compute_tree_index (   S,
 
)
Value:
{\
size_t X = S >> TREEBIN_SHIFT;\
if (X == 0)\
I = 0;\
else if (X > 0xFFFF)\
I = NTREEBINS-1;\
else {\
unsigned int Y = (unsigned int)X;\
unsigned int N = ((Y - 0x100) >> 16) & 8;\
unsigned int K = (((Y <<= N) - 0x1000) >> 16) & 4;\
N += K;\
N += K = (((Y <<= K) - 0x4000) >> 16) & 2;\
K = 14 - N + ((Y <<= K) >> 15);\
I = (K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1));\
}\
}
typedef int(XMLCALL *XML_NotStandaloneHandler)(void *userData)
#define TREEBIN_SHIFT
Definition: mymalloc.cc:2441
#define NTREEBINS
Definition: mymalloc.cc:2438
**D E S C R I P T I O N

Definition at line 2737 of file mymalloc.cc.

#define CORRUPTION_ERROR_ACTION (   m)    ABORT

Definition at line 2638 of file mymalloc.cc.

#define DEBUG   0
#define DEFAULT_GRANULARITY   (0) /* 0 means to compute in init_mparams */

Definition at line 620 of file mymalloc.cc.

#define DEFAULT_MMAP_THRESHOLD   ((size_t)256U * (size_t)1024U)

Definition at line 634 of file mymalloc.cc.

#define DEFAULT_TRIM_THRESHOLD   ((size_t)2U * (size_t)1024U * (size_t)1024U)

Definition at line 627 of file mymalloc.cc.

#define DIRECT_MMAP_DEFAULT (   s)    MMAP_DEFAULT(s)

Definition at line 1503 of file mymalloc.cc.

#define disable_contiguous (   M)    ((M)->mflags |= USE_NONCONTIGUOUS_BIT)

Definition at line 2519 of file mymalloc.cc.

#define disable_lock (   M)    ((M)->mflags &= ~USE_LOCK_BIT)

Definition at line 2512 of file mymalloc.cc.

#define disable_mmap (   M)    ((M)->mflags &= ~USE_MMAP_BIT)

Definition at line 2516 of file mymalloc.cc.

Referenced by mspace_track_large_chunks().

#define dlcalloc   mycalloc

Definition at line 760 of file mymalloc.cc.

#define dlfree   myfree

Definition at line 761 of file mymalloc.cc.

Referenced by dlrealloc().

#define dlindependent_calloc   myindependent_calloc

Definition at line 774 of file mymalloc.cc.

#define dlindependent_comalloc   myindependent_comalloc

Definition at line 775 of file mymalloc.cc.

#define dlmallinfo   mymallinfo

Definition at line 767 of file mymalloc.cc.

#define dlmalloc   mymalloc

Definition at line 762 of file mymalloc.cc.

Referenced by dlcalloc(), and dlrealloc().

#define dlmalloc_footprint   mymalloc_footprint

Definition at line 772 of file mymalloc.cc.

#define dlmalloc_max_footprint   mymalloc_max_footprint

Definition at line 773 of file mymalloc.cc.

#define dlmalloc_stats   mymalloc_stats

Definition at line 770 of file mymalloc.cc.

#define dlmalloc_trim   mymalloc_trim

Definition at line 769 of file mymalloc.cc.

#define dlmalloc_usable_size   mymalloc_usable_size

Definition at line 771 of file mymalloc.cc.

#define DLMALLOC_VERSION   20804

Definition at line 488 of file mymalloc.cc.

#define dlmallopt   mymallopt

Definition at line 768 of file mymalloc.cc.

#define dlmemalign   mymemalign

Definition at line 763 of file mymalloc.cc.

Referenced by dlpvalloc(), and dlvalloc().

#define dlpvalloc   mypvalloc

Definition at line 766 of file mymalloc.cc.

#define dlrealloc   myrealloc

Definition at line 764 of file mymalloc.cc.

#define dlvalloc   myvalloc

Definition at line 765 of file mymalloc.cc.

#define enable_lock (   M)    ((M)->mflags |= USE_LOCK_BIT)

Definition at line 2511 of file mymalloc.cc.

#define enable_mmap (   M)    ((M)->mflags |= USE_MMAP_BIT)

Definition at line 2515 of file mymalloc.cc.

Referenced by mspace_track_large_chunks().

#define ensure_initialization ( )    (void)(mparams.magic != 0 || init_mparams())
#define EXTERN_BIT   (8U)

Definition at line 1613 of file mymalloc.cc.

Referenced by create_mspace_with_base(), and destroy_mspace().

#define FENCEPOST_HEAD   (INUSE_BITS|SIZE_T_SIZE)

Definition at line 2126 of file mymalloc.cc.

#define FLAG4_BIT   (SIZE_T_FOUR)

Definition at line 2121 of file mymalloc.cc.

#define FLAG_BITS   (PINUSE_BIT|CINUSE_BIT|FLAG4_BIT)

Definition at line 2123 of file mymalloc.cc.

#define fm   gm
#define FOOTERS   0

Definition at line 563 of file mymalloc.cc.

#define FORCEINLINE

Definition at line 752 of file mymalloc.cc.

#define FOUR_SIZE_T_SIZES   (SIZE_T_SIZE<<2)

Definition at line 1451 of file mymalloc.cc.

#define get_foot (   p,
  s 
)    (((mchunkptr)((char*)(p) + (s)))->prev_foot)

Definition at line 2150 of file mymalloc.cc.

#define gm   (&_gm_)
#define granularity_align (   S)
Value:
(((S) + (mparams.granularity - SIZE_T_ONE))\
& ~(mparams.granularity - SIZE_T_ONE))
#define SIZE_T_ONE
Definition: mymalloc.cc:1447
size_t granularity
Definition: mymalloc.cc:2484

Definition at line 2531 of file mymalloc.cc.

Referenced by create_mspace().

#define HALF_MAX_SIZE_T   (MAX_SIZE_T / 2U)

Definition at line 1453 of file mymalloc.cc.

#define HAVE_MMAP   1

Definition at line 588 of file mymalloc.cc.

Referenced by create_mspace().

#define HAVE_MORECORE   1

Definition at line 607 of file mymalloc.cc.

Referenced by create_mspace().

#define HAVE_MREMAP   0

Definition at line 597 of file mymalloc.cc.

#define idx2bit (   i)    ((binmap_t)(1) << (i))

Definition at line 2774 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define INITIAL_LOCK (   l)

Definition at line 1904 of file mymalloc.cc.

#define INSECURE   0

Definition at line 585 of file mymalloc.cc.

#define insert_chunk (   M,
  P,
 
)
Value:
if (is_small(S)) insert_small_chunk(M, P, S)\
else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); }
struct malloc_tree_chunk * tchunkptr
Definition: mymalloc.cc:2276
#define insert_small_chunk(M, P, S)
Definition: mymalloc.cc:3415
#define is_small(s)
Definition: mymalloc.cc:2682
#define insert_large_chunk(M, X, S)
Definition: mymalloc.cc:3488

Definition at line 3629 of file mymalloc.cc.

#define insert_large_chunk (   M,
  X,
 
)

Definition at line 3488 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define insert_small_chunk (   M,
  P,
 
)
Value:
{\
if (!smallmap_is_marked(M, I))\
else if (RTCHECK(ok_address(M, B->fd)))\
F = B->fd;\
else {\
}\
B->fd = P;\
F->bk = P;\
P->fd = F;\
P->bk = B;\
}
#define CORRUPTION_ERROR_ACTION(m)
Definition: mymalloc.cc:2638
struct malloc_chunk * mchunkptr
Definition: mymalloc.cc:2065
#define assert(x)
Definition: mymalloc.cc:1309
#define mark_smallmap(M, i)
Definition: mymalloc.cc:2777
#define smallbin_at(M, i)
Definition: mymalloc.cc:2688
unsigned int bindex_t
Definition: mymalloc.cc:2067
#define smallmap_is_marked(M, i)
Definition: mymalloc.cc:2779
#define small_index(s)
Definition: mymalloc.cc:2683
#define ok_address(M, a)
Definition: mymalloc.cc:2868
#define MIN_CHUNK_SIZE
Definition: mymalloc.cc:2087
#define RTCHECK(e)
Definition: mymalloc.cc:2896

Definition at line 3415 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define internal_free (   m,
  mem 
)    if (m == gm) dlfree(mem); else mspace_free(m,mem);

Definition at line 3647 of file mymalloc.cc.

#define internal_malloc (   m,
 
)    (m == gm)? dlmalloc(b) : mspace_malloc(m, b)

Definition at line 3645 of file mymalloc.cc.

Referenced by mspace_calloc().

#define INUSE_BITS   (PINUSE_BIT|CINUSE_BIT)

Definition at line 2122 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define is_aligned (   A)    (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0)

Definition at line 1459 of file mymalloc.cc.

#define is_extern_segment (   S)    ((S)->sflags & EXTERN_BIT)

Definition at line 2347 of file mymalloc.cc.

#define is_global (   M)    ((M) == &_gm_)

Definition at line 2500 of file mymalloc.cc.

#define is_granularity_aligned (   S)    (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0)

Definition at line 2548 of file mymalloc.cc.

#define is_initialized (   M)    ((M)->top != 0)

Definition at line 2504 of file mymalloc.cc.

#define is_inuse (   p)    (((p)->head & INUSE_BITS) != PINUSE_BIT)

Definition at line 2131 of file mymalloc.cc.

Referenced by dlmalloc_usable_size(), and mspace_usable_size().

#define is_mmapped (   p)    (((p)->head & INUSE_BITS) == 0)

Definition at line 2132 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define is_mmapped_segment (   S)    ((S)->sflags & USE_MMAP_BIT)

Definition at line 2346 of file mymalloc.cc.

#define is_page_aligned (   S)    (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0)

Definition at line 2546 of file mymalloc.cc.

#define is_small (   s)    (((s) >> SMALLBIN_SHIFT) < NSMALLBINS)

Definition at line 2682 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define least_bit (   x)    ((x) & -(x))

Definition at line 2786 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define left_bits (   x)    ((x<<1) | -(x<<1))

Definition at line 2789 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define leftmost_child (   t)    ((t)->child[0] != 0? (t)->child[0] : (t)->child[1])

Definition at line 2280 of file mymalloc.cc.

#define leftshift_for_tree_index (   i)
Value:
((i == NTREEBINS-1)? 0 : \
((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2)))
#define SIZE_T_ONE
Definition: mymalloc.cc:1447
#define TREEBIN_SHIFT
Definition: mymalloc.cc:2441
#define NTREEBINS
Definition: mymalloc.cc:2438
#define SIZE_T_BITSIZE
Definition: mymalloc.cc:1442

Definition at line 2761 of file mymalloc.cc.

#define M_GRANULARITY   (-2)

Definition at line 670 of file mymalloc.cc.

#define M_MMAP_THRESHOLD   (-3)

Definition at line 671 of file mymalloc.cc.

#define M_TRIM_THRESHOLD   (-1)

Definition at line 669 of file mymalloc.cc.

#define MALLINFO_FIELD_TYPE   size_t

Definition at line 656 of file mymalloc.cc.

#define MALLOC_ALIGNMENT   ((size_t)8U)

Definition at line 560 of file mymalloc.cc.

#define MALLOC_FAILURE_ACTION   errno = ENOMEM;

Definition at line 601 of file mymalloc.cc.

#define malloc_getpagesize   ((size_t)4096U)

Definition at line 1425 of file mymalloc.cc.

#define mark_inuse_foot (   M,
  p,
  s 
)

Definition at line 2906 of file mymalloc.cc.

#define mark_smallmap (   M,
 
)    ((M)->smallmap |= idx2bit(i))

Definition at line 2777 of file mymalloc.cc.

#define mark_treemap (   M,
 
)    ((M)->treemap |= idx2bit(i))

Definition at line 2781 of file mymalloc.cc.

#define MAX_RELEASE_CHECK_RATE   4095

Definition at line 641 of file mymalloc.cc.

#define MAX_REQUEST   ((-MIN_CHUNK_SIZE) << 2)

Definition at line 2097 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define MAX_SIZE_T   (~(size_t)0)

Definition at line 545 of file mymalloc.cc.

Referenced by dlcalloc(), dlmalloc(), mspace_calloc(), and mspace_malloc().

#define MAX_SMALL_REQUEST   (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD)

Definition at line 2444 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define MAX_SMALL_SIZE   (MIN_LARGE_SIZE - SIZE_T_ONE)

Definition at line 2443 of file mymalloc.cc.

#define MCHUNK_SIZE   (sizeof(mchunk))

Definition at line 2073 of file mymalloc.cc.

#define mem2chunk (   mem)    ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES))
#define MFAIL   ((void*)(MAX_SIZE_T))

Definition at line 1476 of file mymalloc.cc.

#define MIN_CHUNK_SIZE   ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK)

Definition at line 2087 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define MIN_LARGE_SIZE   (SIZE_T_ONE << TREEBIN_SHIFT)

Definition at line 2442 of file mymalloc.cc.

#define MIN_REQUEST   (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE)

Definition at line 2098 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define MIN_SMALL_INDEX   (small_index(MIN_CHUNK_SIZE))

Definition at line 2685 of file mymalloc.cc.

#define minsize_for_tree_index (   i)
Value:
((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) | \
(((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1)))
#define SIZE_T_ONE
Definition: mymalloc.cc:1447
#define TREEBIN_SHIFT
Definition: mymalloc.cc:2441

Definition at line 2766 of file mymalloc.cc.

#define mmap_align (   S)    page_align(S)

Definition at line 2540 of file mymalloc.cc.

#define MMAP_CHUNK_OVERHEAD   (TWO_SIZE_T_SIZES)

Definition at line 2082 of file mymalloc.cc.

#define MMAP_CLEARS   1

Definition at line 591 of file mymalloc.cc.

#define MMAP_DEFAULT (   s)
Value:
((dev_zero_fd < 0) ? \
(dev_zero_fd = open("/dev/zero", O_RDWR), \
mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) : \
mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0))
const XML_Char * s
#define MMAP_FLAGS
Definition: mymalloc.cc:1495
#define MMAP_PROT
Definition: mymalloc.cc:1483

Definition at line 1497 of file mymalloc.cc.

#define MMAP_FLAGS   (MAP_PRIVATE)

Definition at line 1495 of file mymalloc.cc.

#define MMAP_FOOT_PAD   (FOUR_SIZE_T_SIZES)

Definition at line 2084 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define MMAP_PROT   (PROT_READ|PROT_WRITE)

Definition at line 1483 of file mymalloc.cc.

#define MORECORE_CONTIGUOUS   1

Definition at line 615 of file mymalloc.cc.

#define MORECORE_DEFAULT   sbrk

Definition at line 613 of file mymalloc.cc.

#define MSPACES   1

Definition at line 485 of file mymalloc.cc.

Referenced by create_mspace().

#define MUNMAP_DEFAULT (   a,
  s 
)    munmap((a), (s))

Definition at line 1482 of file mymalloc.cc.

#define next_chunk (   p)    ((mchunkptr)( ((char*)(p)) + ((p)->head & ~FLAG_BITS)))

Definition at line 2143 of file mymalloc.cc.

#define next_pinuse (   p)    ((next_chunk(p)->head) & PINUSE_BIT)

Definition at line 2147 of file mymalloc.cc.

#define NO_MALLINFO   0

Definition at line 653 of file mymalloc.cc.

#define NO_SEGMENT_TRAVERSAL   0

Definition at line 659 of file mymalloc.cc.

#define NOINLINE

Definition at line 741 of file mymalloc.cc.

#define NSMALLBINS   (32U)

Definition at line 2437 of file mymalloc.cc.

#define NTREEBINS   (32U)

Definition at line 2438 of file mymalloc.cc.

#define ok_address (   M,
  a 
)    ((char*)(a) >= (M)->least_addr)

Definition at line 2868 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define ok_inuse (   p)    is_inuse(p)

Definition at line 2872 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define ok_magic (   M)    (1)
#define ok_next (   p,
  n 
)    ((char*)(p) < (char*)(n))

Definition at line 2870 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define ok_pinuse (   p)    pinuse(p)

Definition at line 2874 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define ONLY_MSPACES   0 /* define to a value */

Definition at line 548 of file mymalloc.cc.

Referenced by create_mspace().

#define overhead_for (   p)    (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD)

Definition at line 2162 of file mymalloc.cc.

Referenced by dlmalloc_usable_size(), and mspace_usable_size().

#define pad_request (   req)    (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK)

Definition at line 2101 of file mymalloc.cc.

Referenced by create_mspace(), create_mspace_with_base(), dlmalloc(), and mspace_malloc().

#define page_align (   S)    (((S) + (mparams.page_size - SIZE_T_ONE)) & ~(mparams.page_size - SIZE_T_ONE))

Definition at line 2527 of file mymalloc.cc.

#define pinuse (   p)    ((p)->head & PINUSE_BIT)

Definition at line 2130 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define PINUSE_BIT   (SIZE_T_ONE)

Definition at line 2119 of file mymalloc.cc.

Referenced by dlfree(), dlmalloc(), mspace_free(), and mspace_malloc().

#define POSTACTION (   M)
#define PREACTION (   M)    (0)
#define prev_chunk (   p)    ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) ))

Definition at line 2144 of file mymalloc.cc.

#define PROCEED_ON_ERROR   0

Definition at line 572 of file mymalloc.cc.

#define RELEASE_MALLOC_GLOBAL_LOCK ( )

Definition at line 1916 of file mymalloc.cc.

#define replace_dv (   M,
  P,
 
)
Value:
{\
size_t DVS = M->dvsize;\
if (DVS != 0) {\
mchunkptr DV = M->dv;\
insert_small_chunk(M, DV, DVS);\
}\
M->dvsize = S;\
M->dv = P;\
}
struct malloc_chunk * mchunkptr
Definition: mymalloc.cc:2065
#define insert_small_chunk(M, P, S)
Definition: mymalloc.cc:3415
#define is_small(s)
Definition: mymalloc.cc:2682
#define assert(x)
Definition: mymalloc.cc:1309

Definition at line 3474 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define request2size (   req)    (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req))

Definition at line 2105 of file mymalloc.cc.

#define RTCHECK (   e)    (e)

Definition at line 2896 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define same_or_left_bits (   x)    ((x) | -(x))

Definition at line 2792 of file mymalloc.cc.

#define segment_holds (   S,
 
)    ((char*)(A) >= S->base && (char*)(A) < S->base + S->size)

Definition at line 2552 of file mymalloc.cc.

#define set_foot (   p,
  s 
)    (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s))

Definition at line 2151 of file mymalloc.cc.

#define set_free_with_pinuse (   p,
  s,
  n 
)    (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s))

Definition at line 2158 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define set_inuse (   M,
  p,
  s 
)
Value:
((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\
((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT)
#define CINUSE_BIT
Definition: mymalloc.cc:2120
const XML_Char * s
#define PINUSE_BIT
Definition: mymalloc.cc:2119
const char * p
Definition: xmltok.h:285

Definition at line 2911 of file mymalloc.cc.

#define set_inuse_and_pinuse (   M,
  p,
  s 
)
Value:
((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\
((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT)
#define CINUSE_BIT
Definition: mymalloc.cc:2120
struct malloc_chunk * mchunkptr
Definition: mymalloc.cc:2065
const XML_Char * s
#define PINUSE_BIT
Definition: mymalloc.cc:2119
const char * p
Definition: xmltok.h:285

Definition at line 2916 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define set_lock (   M,
 
)
Value:
((M)->mflags = (L)?\
((M)->mflags | USE_LOCK_BIT) :\
((M)->mflags & ~USE_LOCK_BIT))
#define USE_LOCK_BIT
Definition: mymalloc.cc:1903

Definition at line 2521 of file mymalloc.cc.

Referenced by create_mspace(), and create_mspace_with_base().

#define set_size_and_pinuse_of_free_chunk (   p,
  s 
)    ((p)->head = (s|PINUSE_BIT), set_foot(p, s))

Definition at line 2154 of file mymalloc.cc.

Referenced by dlfree(), dlmalloc(), mspace_free(), and mspace_malloc().

#define set_size_and_pinuse_of_inuse_chunk (   M,
  p,
  s 
)    ((p)->head = (s|PINUSE_BIT|CINUSE_BIT))

Definition at line 2921 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define should_trim (   M,
  s 
)    ((s) > (M)->trim_check)

Definition at line 2578 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define SIX_SIZE_T_SIZES   (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES)

Definition at line 1452 of file mymalloc.cc.

#define SIZE_T_BITSIZE   (sizeof(size_t) << 3)

Definition at line 1442 of file mymalloc.cc.

#define SIZE_T_FOUR   ((size_t)4)

Definition at line 1449 of file mymalloc.cc.

#define SIZE_T_ONE   ((size_t)1)

Definition at line 1447 of file mymalloc.cc.

Referenced by dlpvalloc().

#define SIZE_T_SIZE   (sizeof(size_t))

Definition at line 1441 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define SIZE_T_TWO   ((size_t)2)

Definition at line 1448 of file mymalloc.cc.

#define SIZE_T_ZERO   ((size_t)0)

Definition at line 1446 of file mymalloc.cc.

#define small_index (   s)    ((s) >> SMALLBIN_SHIFT)

Definition at line 2683 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define small_index2size (   i)    ((i) << SMALLBIN_SHIFT)

Definition at line 2684 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define smallbin_at (   M,
 
)    ((sbinptr)((char*)&((M)->smallbins[(i)<<1])))

Definition at line 2688 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define SMALLBIN_SHIFT   (3U)

Definition at line 2439 of file mymalloc.cc.

#define SMALLBIN_WIDTH   (SIZE_T_ONE << SMALLBIN_SHIFT)

Definition at line 2440 of file mymalloc.cc.

#define smallmap_is_marked (   M,
 
)    ((M)->smallmap & idx2bit(i))

Definition at line 2779 of file mymalloc.cc.

#define SPIN_LOCKS_AVAILABLE   0

Definition at line 541 of file mymalloc.cc.

#define STRUCT_MALLINFO_DECLARED   1

Definition at line 706 of file mymalloc.cc.

#define SYS_ALLOC_PADDING   (TOP_FOOT_SIZE + MALLOC_ALIGNMENT)

Definition at line 2544 of file mymalloc.cc.

#define TOP_FOOT_SIZE   (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE)

Definition at line 2588 of file mymalloc.cc.

Referenced by create_mspace(), and create_mspace_with_base().

#define treebin_at (   M,
 
)    (&((M)->treebins[i]))

Definition at line 2689 of file mymalloc.cc.

#define TREEBIN_SHIFT   (8U)

Definition at line 2441 of file mymalloc.cc.

#define treemap_is_marked (   M,
 
)    ((M)->treemap & idx2bit(i))

Definition at line 2783 of file mymalloc.cc.

#define TWO_SIZE_T_SIZES   (SIZE_T_SIZE<<1)

Definition at line 1450 of file mymalloc.cc.

#define unlink_chunk (   M,
  P,
 
)
Value:
if (is_small(S)) unlink_small_chunk(M, P, S)\
else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); }
struct malloc_tree_chunk * tchunkptr
Definition: mymalloc.cc:2276
#define is_small(s)
Definition: mymalloc.cc:2682
#define unlink_large_chunk(M, X)
Definition: mymalloc.cc:3556
#define unlink_small_chunk(M, P, S)
Definition: mymalloc.cc:3434

Definition at line 3633 of file mymalloc.cc.

Referenced by dlfree(), and mspace_free().

#define unlink_first_small_chunk (   M,
  B,
  P,
 
)
Value:
{\
mchunkptr F = P->fd;\
assert(P != B);\
assert(P != F);\
if (B == F)\
else if (RTCHECK(ok_address(M, F))) {\
B->fd = F;\
F->bk = B;\
}\
else {\
}\
}
#define CORRUPTION_ERROR_ACTION(m)
Definition: mymalloc.cc:2638
struct malloc_chunk * mchunkptr
Definition: mymalloc.cc:2065
#define small_index2size(i)
Definition: mymalloc.cc:2684
#define assert(x)
Definition: mymalloc.cc:1309
#define chunksize(p)
Definition: mymalloc.cc:2134
#define clear_smallmap(M, i)
Definition: mymalloc.cc:2778
struct malloc_chunk * fd
Definition: mymalloc.cc:2060
#define ok_address(M, a)
Definition: mymalloc.cc:2868
#define RTCHECK(e)
Definition: mymalloc.cc:2896

Definition at line 3454 of file mymalloc.cc.

Referenced by dlmalloc(), and mspace_malloc().

#define unlink_large_chunk (   M,
 
)

Definition at line 3556 of file mymalloc.cc.

#define unlink_small_chunk (   M,
  P,
 
)
Value:
{\
mchunkptr F = P->fd;\
mchunkptr B = P->bk;\
assert(P != B);\
assert(P != F);\
if (F == B)\
else if (RTCHECK((F == smallbin_at(M,I) || ok_address(M, F)) &&\
(B == smallbin_at(M,I) || ok_address(M, B)))) {\
F->bk = B;\
B->fd = F;\
}\
else {\
}\
}
#define CORRUPTION_ERROR_ACTION(m)
Definition: mymalloc.cc:2638
struct malloc_chunk * mchunkptr
Definition: mymalloc.cc:2065
struct malloc_chunk * bk
Definition: mymalloc.cc:2061
#define small_index2size(i)
Definition: mymalloc.cc:2684
#define assert(x)
Definition: mymalloc.cc:1309
#define smallbin_at(M, i)
Definition: mymalloc.cc:2688
unsigned int bindex_t
Definition: mymalloc.cc:2067
#define chunksize(p)
Definition: mymalloc.cc:2134
#define clear_smallmap(M, i)
Definition: mymalloc.cc:2778
struct malloc_chunk * fd
Definition: mymalloc.cc:2060
#define small_index(s)
Definition: mymalloc.cc:2683
#define ok_address(M, a)
Definition: mymalloc.cc:2868
#define RTCHECK(e)
Definition: mymalloc.cc:2896

Definition at line 3434 of file mymalloc.cc.

#define USAGE_ERROR_ACTION (   m,
  p 
)    ABORT
#define USE_BUILTIN_FFS   0

Definition at line 647 of file mymalloc.cc.

#define USE_DEV_RANDOM   0

Definition at line 650 of file mymalloc.cc.

#define use_lock (   M)    ((M)->mflags & USE_LOCK_BIT)

Definition at line 2510 of file mymalloc.cc.

#define USE_LOCK_BIT   (0U)

Definition at line 1903 of file mymalloc.cc.

#define USE_LOCKS   0

Definition at line 575 of file mymalloc.cc.

Referenced by create_mspace().

#define use_mmap (   M)    ((M)->mflags & USE_MMAP_BIT)

Definition at line 2514 of file mymalloc.cc.

Referenced by mspace_track_large_chunks().

#define USE_MMAP_BIT   (SIZE_T_ONE)

Define CALL_MMAP/CALL_MUNMAP/CALL_DIRECT_MMAP

Definition at line 1568 of file mymalloc.cc.

Referenced by create_mspace(), and destroy_mspace().

#define use_noncontiguous (   M)    ((M)->mflags & USE_NONCONTIGUOUS_BIT)

Definition at line 2518 of file mymalloc.cc.

#define USE_NONCONTIGUOUS_BIT   (4U)

Definition at line 1610 of file mymalloc.cc.

#define USE_SPIN_LOCKS   0

Definition at line 581 of file mymalloc.cc.

Typedef Documentation

typedef unsigned int bindex_t

Definition at line 2067 of file mymalloc.cc.

typedef unsigned int binmap_t

Definition at line 2068 of file mymalloc.cc.

typedef unsigned int flag_t

Definition at line 2069 of file mymalloc.cc.

typedef struct malloc_chunk mchunk

Definition at line 2064 of file mymalloc.cc.

typedef struct malloc_chunk* mchunkptr

Definition at line 2065 of file mymalloc.cc.

typedef struct malloc_segment msegment

Definition at line 2349 of file mymalloc.cc.

typedef struct malloc_segment* msegmentptr

Definition at line 2350 of file mymalloc.cc.

typedef void* mspace

Definition at line 1123 of file mymalloc.cc.

typedef struct malloc_state* mstate

Definition at line 2470 of file mymalloc.cc.

typedef struct malloc_chunk* sbinptr

Definition at line 2066 of file mymalloc.cc.

typedef struct malloc_tree_chunk* tbinptr

Definition at line 2277 of file mymalloc.cc.

typedef struct malloc_tree_chunk tchunk

Definition at line 2275 of file mymalloc.cc.

typedef struct malloc_tree_chunk* tchunkptr

Definition at line 2276 of file mymalloc.cc.

Function Documentation

mspace create_mspace ( size_t  capacity,
int  locked 
)

Definition at line 4974 of file mymalloc.cc.

References CALL_MMAP, CMFAIL, ensure_initialization, malloc_params::granularity, granularity_align, HAVE_MMAP, HAVE_MORECORE, python.hepunit::m, MSPACES, ONLY_MSPACES, pad_request, malloc_params::page_size, malloc_state::seg, set_lock, malloc_segment::sflags, TOP_FOOT_SIZE, USE_LOCKS, and USE_MMAP_BIT.

Referenced by calloc(), malloc(), realloc(), and valloc().

4974  {
4975 
4976  //Added by xindong
4977  std::cout << "HAVE_MORECORE: " << HAVE_MORECORE << ", "
4978  << "MSPACES: " << MSPACES << ", "
4979  << "ONLY_MSPACES: " << ONLY_MSPACES << ", "
4980  << "HAVE_MMAP: " << HAVE_MMAP << ", "
4981  << " USE_LOCKS: " << USE_LOCKS << std::endl;
4982 
4983  mstate m = 0;
4984  size_t msize;
4986  msize = pad_request(sizeof(struct malloc_state));
4987  //Commented out by xindong
4988  if (capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) {
4989  std::cout << "handle capacity paramenter: " << capacity << ", "
4990  << (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)
4991  << std::endl;
4992  size_t rs = ((capacity == 0)? mparams.granularity :
4993  (capacity + TOP_FOOT_SIZE + msize));
4994  size_t tsize = granularity_align(rs);
4995  char* tbase = (char*)(CALL_MMAP(tsize));
4996  if (tbase != CMFAIL) {
4997  m = init_user_mstate(tbase, tsize);
4998  m->seg.sflags = USE_MMAP_BIT;
4999  set_lock(m, locked);
5000  }
5001  }
5002  return (mspace)m;
5003 }
#define TOP_FOOT_SIZE
Definition: mymalloc.cc:2588
#define HAVE_MORECORE
Definition: mymalloc.cc:607
#define granularity_align(S)
Definition: mymalloc.cc:2531
msegment seg
Definition: mymalloc.cc:2465
#define USE_LOCKS
Definition: mymalloc.cc:575
#define CMFAIL
Definition: mymalloc.cc:1477
void * mspace
Definition: mymalloc.h:419
size_t page_size
Definition: mymalloc.cc:2483
#define HAVE_MMAP
Definition: mymalloc.cc:588
#define ensure_initialization()
Definition: mymalloc.cc:2493
#define USE_MMAP_BIT
Definition: mymalloc.cc:1568
#define set_lock(M, L)
Definition: mymalloc.cc:2521
#define MSPACES
Definition: mymalloc.cc:485
#define ONLY_MSPACES
Definition: mymalloc.cc:548
size_t granularity
Definition: mymalloc.cc:2484
#define pad_request(req)
Definition: mymalloc.cc:2101
#define CALL_MMAP(s)
Definition: mymalloc.cc:1573
mspace create_mspace_with_base ( void base,
size_t  capacity,
int  locked 
)

Definition at line 5005 of file mymalloc.cc.

References ensure_initialization, EXTERN_BIT, python.hepunit::m, pad_request, malloc_params::page_size, malloc_state::seg, set_lock, malloc_segment::sflags, and TOP_FOOT_SIZE.

5005  {
5006  mstate m = 0;
5007  size_t msize;
5009  msize = pad_request(sizeof(struct malloc_state));
5010  if (capacity > msize + TOP_FOOT_SIZE &&
5011  capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) {
5012  m = init_user_mstate((char*)base, capacity);
5013  m->seg.sflags = EXTERN_BIT;
5014  set_lock(m, locked);
5015  }
5016  return (mspace)m;
5017 }
#define TOP_FOOT_SIZE
Definition: mymalloc.cc:2588
msegment seg
Definition: mymalloc.cc:2465
void * mspace
Definition: mymalloc.h:419
size_t page_size
Definition: mymalloc.cc:2483
#define ensure_initialization()
Definition: mymalloc.cc:2493
#define set_lock(M, L)
Definition: mymalloc.cc:2521
const XML_Char int const XML_Char int const XML_Char * base
#define pad_request(req)
Definition: mymalloc.cc:2101
#define EXTERN_BIT
Definition: mymalloc.cc:1613
size_t destroy_mspace ( mspace  msp)

Definition at line 5034 of file mymalloc.cc.

References malloc_segment::base, CALL_MUNMAP, EXTERN_BIT, python.hepunit::ms, malloc_segment::next, ok_magic, malloc_state::seg, malloc_segment::sflags, malloc_segment::size, USAGE_ERROR_ACTION, and USE_MMAP_BIT.

5034  {
5035  size_t freed = 0;
5036  mstate ms = (mstate)msp;
5037  if (ok_magic(ms)) {
5038  msegmentptr sp = &ms->seg;
5039  while (sp != 0) {
5040  char* base = sp->base;
5041  size_t size = sp->size;
5042  flag_t flag = sp->sflags;
5043  sp = sp->next;
5044  if ((flag & USE_MMAP_BIT) && !(flag & EXTERN_BIT) &&
5045  CALL_MUNMAP(base, size) == 0)
5046  freed += size;
5047  }
5048  }
5049  else {
5050  USAGE_ERROR_ACTION(ms,ms);
5051  }
5052  return freed;
5053 }
#define CALL_MUNMAP(a, s)
Definition: mymalloc.cc:1578
msegment seg
Definition: mymalloc.cc:2465
#define USAGE_ERROR_ACTION(m, p)
Definition: mymalloc.cc:2642
struct malloc_segment * next
Definition: mymalloc.cc:2342
struct malloc_state * mstate
Definition: mymalloc.cc:2470
unsigned int flag_t
Definition: mymalloc.cc:2069
#define USE_MMAP_BIT
Definition: mymalloc.cc:1568
const XML_Char int const XML_Char int const XML_Char * base
#define ok_magic(M)
Definition: mymalloc.cc:2887
#define EXTERN_BIT
Definition: mymalloc.cc:1613
void* dlcalloc ( size_t  n_elements,
size_t  elem_size 
)

Definition at line 4837 of file mymalloc.cc.

References calloc_must_clear, dlmalloc, MAX_SIZE_T, and mem2chunk.

4837  {
4838  void* mem;
4839  size_t req = 0;
4840  if (n_elements != 0) {
4841  req = n_elements * elem_size;
4842  if (((n_elements | elem_size) & ~(size_t)0xffff) &&
4843  (req / n_elements != elem_size))
4844  req = MAX_SIZE_T; /* force downstream failure on overflow */
4845  }
4846  mem = dlmalloc(req);
4847  if (mem != 0 && calloc_must_clear(mem2chunk(mem)))
4848  memset(mem, 0, req);
4849  return mem;
4850 }
#define MAX_SIZE_T
Definition: mymalloc.cc:545
#define mem2chunk(mem)
Definition: mymalloc.cc:2092
#define dlmalloc
Definition: mymalloc.cc:762
#define calloc_must_clear(p)
Definition: mymalloc.cc:2167
void dlfree ( void mem)

Definition at line 4728 of file mymalloc.cc.

References CALL_MUNMAP, check_free_chunk, check_inuse_chunk, chunk_minus_offset, chunk_plus_offset, chunksize, cinuse, malloc_state::dv, malloc_state::dvsize, fm, malloc_state::footprint, malloc_chunk::head, insert_large_chunk, insert_small_chunk, INUSE_BITS, is_mmapped, is_small, mem2chunk, MMAP_FOOT_PAD, ok_address, ok_inuse, ok_magic, ok_next, ok_pinuse, pinuse, PINUSE_BIT, POSTACTION, PREACTION, malloc_chunk::prev_foot, malloc_state::release_checks, RTCHECK, set_free_with_pinuse, set_size_and_pinuse_of_free_chunk, should_trim, malloc_state::top, malloc_state::topsize, unlink_chunk, and USAGE_ERROR_ACTION.

4728  {
4729  /*
4730  Consolidate freed chunks with preceeding or succeeding bordering
4731  free chunks, if they exist, and then place in a bin. Intermixed
4732  with special cases for top, dv, mmapped chunks, and usage errors.
4733  */
4734 
4735  if (mem != 0) {
4736  mchunkptr p = mem2chunk(mem);
4737 #if FOOTERS
4738  mstate fm = get_mstate_for(p);
4739  if (!ok_magic(fm)) {
4740  USAGE_ERROR_ACTION(fm, p);
4741  return;
4742  }
4743 #else /* FOOTERS */
4744 #define fm gm
4745 #endif /* FOOTERS */
4746  if (!PREACTION(fm)) {
4747  check_inuse_chunk(fm, p);
4748  if (RTCHECK(ok_address(fm, p) && ok_inuse(p))) {
4749  size_t psize = chunksize(p);
4750  mchunkptr next = chunk_plus_offset(p, psize);
4751  if (!pinuse(p)) {
4752  size_t prevsize = p->prev_foot;
4753  if (is_mmapped(p)) {
4754  psize += prevsize + MMAP_FOOT_PAD;
4755  if (CALL_MUNMAP((char*)p - prevsize, psize) == 0)
4756  fm->footprint -= psize;
4757  goto postaction;
4758  }
4759  else {
4760  mchunkptr prev = chunk_minus_offset(p, prevsize);
4761  psize += prevsize;
4762  p = prev;
4763  if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */
4764  if (p != fm->dv) {
4765  unlink_chunk(fm, p, prevsize);
4766  }
4767  else if ((next->head & INUSE_BITS) == INUSE_BITS) {
4768  fm->dvsize = psize;
4769  set_free_with_pinuse(p, psize, next);
4770  goto postaction;
4771  }
4772  }
4773  else
4774  goto erroraction;
4775  }
4776  }
4777 
4778  if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) {
4779  if (!cinuse(next)) { /* consolidate forward */
4780  if (next == fm->top) {
4781  size_t tsize = fm->topsize += psize;
4782  fm->top = p;
4783  p->head = tsize | PINUSE_BIT;
4784  if (p == fm->dv) {
4785  fm->dv = 0;
4786  fm->dvsize = 0;
4787  }
4788  if (should_trim(fm, tsize))
4789  sys_trim(fm, 0);
4790  goto postaction;
4791  }
4792  else if (next == fm->dv) {
4793  size_t dsize = fm->dvsize += psize;
4794  fm->dv = p;
4796  goto postaction;
4797  }
4798  else {
4799  size_t nsize = chunksize(next);
4800  psize += nsize;
4801  unlink_chunk(fm, next, nsize);
4803  if (p == fm->dv) {
4804  fm->dvsize = psize;
4805  goto postaction;
4806  }
4807  }
4808  }
4809  else
4810  set_free_with_pinuse(p, psize, next);
4811 
4812  if (is_small(psize)) {
4813  insert_small_chunk(fm, p, psize);
4814  check_free_chunk(fm, p);
4815  }
4816  else {
4817  tchunkptr tp = (tchunkptr)p;
4818  insert_large_chunk(fm, tp, psize);
4819  check_free_chunk(fm, p);
4820  if (--fm->release_checks == 0)
4821  release_unused_segments(fm);
4822  }
4823  goto postaction;
4824  }
4825  }
4826  erroraction:
4827  USAGE_ERROR_ACTION(fm, p);
4828  postaction:
4829  POSTACTION(fm);
4830  }
4831  }
4832 #if !FOOTERS
4833 #undef fm
4834 #endif /* FOOTERS */
4835 }
#define chunk_minus_offset(p, s)
Definition: mymalloc.cc:2140
#define pinuse(p)
Definition: mymalloc.cc:2130
mchunkptr top
Definition: mymalloc.cc:2453
struct malloc_tree_chunk * tchunkptr
Definition: mymalloc.cc:2276
#define insert_small_chunk(M, P, S)
Definition: mymalloc.cc:3415
#define CALL_MUNMAP(a, s)
Definition: mymalloc.cc:1578
#define PINUSE_BIT
Definition: mymalloc.cc:2119
const char * p
Definition: xmltok.h:285
#define is_small(s)
Definition: mymalloc.cc:2682
#define is_mmapped(p)
Definition: mymalloc.cc:2132
size_t release_checks
Definition: mymalloc.cc:2455
#define chunk_plus_offset(p, s)
Definition: mymalloc.cc:2139
#define POSTACTION(M)
Definition: mymalloc.cc:2611
#define cinuse(p)
Definition: mymalloc.cc:2129
#define ok_pinuse(p)
Definition: mymalloc.cc:2874
size_t head
Definition: mymalloc.cc:2059
#define chunksize(p)
Definition: mymalloc.cc:2134
#define USAGE_ERROR_ACTION(m, p)
Definition: mymalloc.cc:2642
size_t prev_foot
Definition: mymalloc.cc:2058
#define PREACTION(M)
Definition: mymalloc.cc:2607
#define MMAP_FOOT_PAD
Definition: mymalloc.cc:2084
#define mem2chunk(mem)
Definition: mymalloc.cc:2092
#define unlink_chunk(M, P, S)
Definition: mymalloc.cc:3633
#define should_trim(M, s)
Definition: mymalloc.cc:2578
#define check_free_chunk(M, P)
Definition: mymalloc.cc:2651
#define set_size_and_pinuse_of_free_chunk(p, s)
Definition: mymalloc.cc:2154
#define check_inuse_chunk(M, P)
Definition: mymalloc.cc:2652
#define ok_inuse(p)
Definition: mymalloc.cc:2872
#define insert_large_chunk(M, X, S)
Definition: mymalloc.cc:3488
#define fm
#define ok_next(p, n)
Definition: mymalloc.cc:2870
size_t topsize
Definition: mymalloc.cc:2450
#define ok_address(M, a)
Definition: mymalloc.cc:2868
size_t dvsize
Definition: mymalloc.cc:2449
#define ok_magic(M)
Definition: mymalloc.cc:2887
mchunkptr dv
Definition: mymalloc.cc:2452
size_t footprint
Definition: mymalloc.cc:2459
#define INUSE_BITS
Definition: mymalloc.cc:2122
#define RTCHECK(e)
Definition: mymalloc.cc:2896
#define set_free_with_pinuse(p, s, n)
Definition: mymalloc.cc:2158
void** dlindependent_calloc ( size_t  ,
size_t  ,
void **   
)
void** dlindependent_calloc ( size_t  n_elements,
size_t  elem_size,
void chunks[] 
)

Definition at line 4879 of file mymalloc.cc.

References gm.

4880  {
4881  size_t sz = elem_size; /* serves as 1-element array */
4882  return ialloc(gm, n_elements, &sz, 3, chunks);
4883 }
#define gm
Definition: mymalloc.cc:2499
void** dlindependent_comalloc ( size_t  ,
size_t *  ,
void **   
)
void** dlindependent_comalloc ( size_t  n_elements,
size_t  sizes[],
void chunks[] 
)

Definition at line 4885 of file mymalloc.cc.

References gm.

4886  {
4887  return ialloc(gm, n_elements, sizes, 0, chunks);
4888 }
#define gm
Definition: mymalloc.cc:2499
struct mallinfo dlmallinfo ( void  )

Definition at line 4923 of file mymalloc.cc.

References gm.

4923  {
4924  return internal_mallinfo(gm);
4925 }
#define gm
Definition: mymalloc.cc:2499
void* dlmalloc ( size_t  bytes)

Definition at line 4592 of file mymalloc.cc.

References assert, test::b, check_malloced_chunk, check_top_chunk, chunk2mem, chunk_plus_offset, chunksize, compute_bit2idx, ensure_initialization, malloc_chunk::fd, gm, malloc_chunk::head, idx2bit, least_bit, left_bits, MAX_REQUEST, MAX_SIZE_T, MAX_SMALL_REQUEST, MIN_CHUNK_SIZE, MIN_REQUEST, pad_request, PINUSE_BIT, POSTACTION, PREACTION, replace_dv, set_inuse_and_pinuse, set_size_and_pinuse_of_free_chunk, set_size_and_pinuse_of_inuse_chunk, SIZE_T_SIZE, small_index, small_index2size, smallbin_at, and unlink_first_small_chunk.

4592  {
4593  /*
4594  Basic algorithm:
4595  If a small request (< 256 bytes minus per-chunk overhead):
4596  1. If one exists, use a remainderless chunk in associated smallbin.
4597  (Remainderless means that there are too few excess bytes to
4598  represent as a chunk.)
4599  2. If it is big enough, use the dv chunk, which is normally the
4600  chunk adjacent to the one used for the most recent small request.
4601  3. If one exists, split the smallest available chunk in a bin,
4602  saving remainder in dv.
4603  4. If it is big enough, use the top chunk.
4604  5. If available, get memory from system and use it
4605  Otherwise, for a large request:
4606  1. Find the smallest available binned chunk that fits, and use it
4607  if it is better fitting than dv chunk, splitting if necessary.
4608  2. If better fitting than any binned chunk, use the dv chunk.
4609  3. If it is big enough, use the top chunk.
4610  4. If request size >= mmap threshold, try to directly mmap this chunk.
4611  5. If available, get memory from system and use it
4612 
4613  The ugly goto's here ensure that postaction occurs along all paths.
4614  */
4615 
4616 #if USE_LOCKS
4617  ensure_initialization(); /* initialize in sys_alloc if not using locks */
4618 #endif
4619 
4620  if (!PREACTION(gm)) {
4621  void* mem;
4622  size_t nb;
4623  if (bytes <= MAX_SMALL_REQUEST) {
4624  bindex_t idx;
4625  binmap_t smallbits;
4626  nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes);
4627  idx = small_index(nb);
4628  smallbits = gm->smallmap >> idx;
4629 
4630  if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */
4631  mchunkptr b, p;
4632  idx += ~smallbits & 1; /* Uses next bin if idx empty */
4633  b = smallbin_at(gm, idx);
4634  p = b->fd;
4635  assert(chunksize(p) == small_index2size(idx));
4636  unlink_first_small_chunk(gm, b, p, idx);
4638  mem = chunk2mem(p);
4639  check_malloced_chunk(gm, mem, nb);
4640  goto postaction;
4641  }
4642 
4643  else if (nb > gm->dvsize) {
4644  if (smallbits != 0) { /* Use chunk in next nonempty smallbin */
4645  mchunkptr b, p, r;
4646  size_t rsize;
4647  bindex_t i;
4648  binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx));
4649  binmap_t leastbit = least_bit(leftbits);
4650  compute_bit2idx(leastbit, i);
4651  b = smallbin_at(gm, i);
4652  p = b->fd;
4653  assert(chunksize(p) == small_index2size(i));
4654  unlink_first_small_chunk(gm, b, p, i);
4655  rsize = small_index2size(i) - nb;
4656  /* Fit here cannot be remainderless if 4byte sizes */
4657  if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE)
4659  else {
4661  r = chunk_plus_offset(p, nb);
4663  replace_dv(gm, r, rsize);
4664  }
4665  mem = chunk2mem(p);
4666  check_malloced_chunk(gm, mem, nb);
4667  goto postaction;
4668  }
4669 
4670  else if (gm->treemap != 0 && (mem = tmalloc_small(gm, nb)) != 0) {
4671  check_malloced_chunk(gm, mem, nb);
4672  goto postaction;
4673  }
4674  }
4675  }
4676  else if (bytes >= MAX_REQUEST)
4677  nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */
4678  else {
4679  nb = pad_request(bytes);
4680  if (gm->treemap != 0 && (mem = tmalloc_large(gm, nb)) != 0) {
4681  check_malloced_chunk(gm, mem, nb);
4682  goto postaction;
4683  }
4684  }
4685 
4686  if (nb <= gm->dvsize) {
4687  size_t rsize = gm->dvsize - nb;
4688  mchunkptr p = gm->dv;
4689  if (rsize >= MIN_CHUNK_SIZE) { /* split dv */
4690  mchunkptr r = gm->dv = chunk_plus_offset(p, nb);
4691  gm->dvsize = rsize;
4694  }
4695  else { /* exhaust dv */
4696  size_t dvs = gm->dvsize;
4697  gm->dvsize = 0;
4698  gm->dv = 0;
4699  set_inuse_and_pinuse(gm, p, dvs);
4700  }
4701  mem = chunk2mem(p);
4702  check_malloced_chunk(gm, mem, nb);
4703  goto postaction;
4704  }
4705 
4706  else if (nb < gm->topsize) { /* Split top */
4707  size_t rsize = gm->topsize -= nb;
4708  mchunkptr p = gm->top;
4709  mchunkptr r = gm->top = chunk_plus_offset(p, nb);
4710  r->head = rsize | PINUSE_BIT;
4712  mem = chunk2mem(p);
4713  check_top_chunk(gm, gm->top);
4714  check_malloced_chunk(gm, mem, nb);
4715  goto postaction;
4716  }
4717 
4718  mem = sys_alloc(gm, nb);
4719 
4720  postaction:
4721  POSTACTION(gm);
4722  return mem;
4723  }
4724 
4725  return 0;
4726 }
#define gm
Definition: mymalloc.cc:2499
#define idx2bit(i)
Definition: mymalloc.cc:2774
#define MAX_SIZE_T
Definition: mymalloc.cc:545
#define unlink_first_small_chunk(M, B, P, I)
Definition: mymalloc.cc:3454
#define small_index2size(i)
Definition: mymalloc.cc:2684
#define PINUSE_BIT
Definition: mymalloc.cc:2119
const char * p
Definition: xmltok.h:285
#define assert(x)
Definition: mymalloc.cc:1309
#define chunk_plus_offset(p, s)
Definition: mymalloc.cc:2139
#define POSTACTION(M)
Definition: mymalloc.cc:2611
#define smallbin_at(M, i)
Definition: mymalloc.cc:2688
#define chunk2mem(p)
Definition: mymalloc.cc:2091
unsigned int bindex_t
Definition: mymalloc.cc:2067
size_t head
Definition: mymalloc.cc:2059
#define left_bits(x)
Definition: mymalloc.cc:2789
#define chunksize(p)
Definition: mymalloc.cc:2134
unsigned int binmap_t
Definition: mymalloc.cc:2068
#define MIN_REQUEST
Definition: mymalloc.cc:2098
#define PREACTION(M)
Definition: mymalloc.cc:2607
#define compute_bit2idx(X, I)
Definition: mymalloc.cc:2824
#define ensure_initialization()
Definition: mymalloc.cc:2493
struct malloc_chunk * fd
Definition: mymalloc.cc:2060
#define small_index(s)
Definition: mymalloc.cc:2683
#define check_top_chunk(M, P)
Definition: mymalloc.cc:2656
#define set_size_and_pinuse_of_free_chunk(p, s)
Definition: mymalloc.cc:2154
#define MAX_REQUEST
Definition: mymalloc.cc:2097
#define check_malloced_chunk(M, P, N)
Definition: mymalloc.cc:2653
#define SIZE_T_SIZE
Definition: mymalloc.cc:1441
#define set_size_and_pinuse_of_inuse_chunk(M, p, s)
Definition: mymalloc.cc:2921
#define replace_dv(M, P, S)
Definition: mymalloc.cc:3474
#define pad_request(req)
Definition: mymalloc.cc:2101
#define least_bit(x)
Definition: mymalloc.cc:2786
#define MIN_CHUNK_SIZE
Definition: mymalloc.cc:2087
#define MAX_SMALL_REQUEST
Definition: mymalloc.cc:2444
#define set_inuse_and_pinuse(M, p, s)
Definition: mymalloc.cc:2916
size_t dlmalloc_footprint ( void  )

Definition at line 4914 of file mymalloc.cc.

References gm.

4914  {
4915  return gm->footprint;
4916 }
#define gm
Definition: mymalloc.cc:2499
size_t dlmalloc_max_footprint ( void  )

Definition at line 4918 of file mymalloc.cc.

References gm.

4918  {
4919  return gm->max_footprint;
4920 }
#define gm
Definition: mymalloc.cc:2499
void dlmalloc_stats ( void  )

Definition at line 4928 of file mymalloc.cc.

References gm.

4928  {
4929  internal_malloc_stats(gm);
4930 }
#define gm
Definition: mymalloc.cc:2499
int dlmalloc_trim ( size_t  pad)

Definition at line 4904 of file mymalloc.cc.

References ensure_initialization, gm, POSTACTION, and PREACTION.

4904  {
4905  int result = 0;
4907  if (!PREACTION(gm)) {
4908  result = sys_trim(gm, pad);
4909  POSTACTION(gm);
4910  }
4911  return result;
4912 }
#define gm
Definition: mymalloc.cc:2499
#define POSTACTION(M)
Definition: mymalloc.cc:2611
#define PREACTION(M)
Definition: mymalloc.cc:2607
#define ensure_initialization()
Definition: mymalloc.cc:2493
size_t dlmalloc_usable_size ( void mem)

Definition at line 4938 of file mymalloc.cc.

References chunksize, is_inuse, mem2chunk, and overhead_for.

4938  {
4939  if (mem != 0) {
4940  mchunkptr p = mem2chunk(mem);
4941  if (is_inuse(p))
4942  return chunksize(p) - overhead_for(p);
4943  }
4944  return 0;
4945 }
const char * p
Definition: xmltok.h:285
#define chunksize(p)
Definition: mymalloc.cc:2134
#define mem2chunk(mem)
Definition: mymalloc.cc:2092
#define is_inuse(p)
Definition: mymalloc.cc:2131
#define overhead_for(p)
Definition: mymalloc.cc:2162
int dlmallopt ( int  param_number,
int  value 
)

Definition at line 4932 of file mymalloc.cc.

4932  {
4933  return change_mparam(param_number, value);
4934 }
const XML_Char int const XML_Char * value
void* dlmemalign ( size_t  alignment,
size_t  bytes 
)

Definition at line 4875 of file mymalloc.cc.

References gm.

4875  {
4876  return internal_memalign(gm, alignment, bytes);
4877 }
#define gm
Definition: mymalloc.cc:2499
void* dlpvalloc ( size_t  bytes)

Definition at line 4897 of file mymalloc.cc.

References dlmemalign, ensure_initialization, malloc_params::page_size, and SIZE_T_ONE.

4897  {
4898  size_t pagesz;
4900  pagesz = mparams.page_size;
4901  return dlmemalign(pagesz, (bytes + pagesz - SIZE_T_ONE) & ~(pagesz - SIZE_T_ONE));
4902 }
#define SIZE_T_ONE
Definition: mymalloc.cc:1447
#define dlmemalign
Definition: mymalloc.cc:763
size_t page_size
Definition: mymalloc.cc:2483
#define ensure_initialization()
Definition: mymalloc.cc:2493
void* dlrealloc ( void oldmem,
size_t  bytes 
)

Definition at line 4852 of file mymalloc.cc.

References dlfree, dlmalloc, gm, mem2chunk, ok_magic, and USAGE_ERROR_ACTION.

4852  {
4853  if (oldmem == 0)
4854  return dlmalloc(bytes);
4855 #ifdef REALLOC_ZERO_BYTES_FREES
4856  if (bytes == 0) {
4857  dlfree(oldmem);
4858  return 0;
4859  }
4860 #endif /* REALLOC_ZERO_BYTES_FREES */
4861  else {
4862 #if ! FOOTERS
4863  mstate m = gm;
4864 #else /* FOOTERS */
4865  mstate m = get_mstate_for(mem2chunk(oldmem));
4866  if (!ok_magic(m)) {
4867  USAGE_ERROR_ACTION(m, oldmem);
4868  return 0;
4869  }
4870 #endif /* FOOTERS */
4871  return internal_realloc(m, oldmem, bytes);
4872  }
4873 }
#define gm
Definition: mymalloc.cc:2499
#define USAGE_ERROR_ACTION(m, p)
Definition: mymalloc.cc:2642
#define mem2chunk(mem)
Definition: mymalloc.cc:2092
#define dlmalloc
Definition: mymalloc.cc:762
#define ok_magic(M)
Definition: mymalloc.cc:2887
#define dlfree
Definition: mymalloc.cc:761
void* dlvalloc ( size_t  bytes)

Definition at line 4890 of file mymalloc.cc.

References dlmemalign, ensure_initialization, and malloc_params::page_size.

4890  {
4891  size_t pagesz;
4893  pagesz = mparams.page_size;
4894  return dlmemalign(pagesz, bytes);
4895 }
#define dlmemalign
Definition: mymalloc.cc:763
size_t page_size
Definition: mymalloc.cc:2483
#define ensure_initialization()
Definition: mymalloc.cc:2493
void* mspace_calloc ( mspace  msp,
size_t  n_elements,
size_t  elem_size 
)

Definition at line 5276 of file mymalloc.cc.

References calloc_must_clear, internal_malloc, MAX_SIZE_T, mem2chunk, python.hepunit::ms, ok_magic, and USAGE_ERROR_ACTION.

Referenced by calloc().

5276  {
5277  void* mem;
5278  size_t req = 0;
5279  mstate ms = (mstate)msp;
5280  if (!ok_magic(ms)) {
5281  USAGE_ERROR_ACTION(ms,ms);
5282  return 0;
5283  }
5284  if (n_elements != 0) {
5285  req = n_elements * elem_size;
5286  if (((n_elements | elem_size) & ~(size_t)0xffff) &&
5287  (req / n_elements != elem_size))
5288  req = MAX_SIZE_T; /* force downstream failure on overflow */
5289  }
5290  mem = internal_malloc(ms, req);
5291  if (mem != 0 && calloc_must_clear(mem2chunk(mem)))
5292  memset(mem, 0, req);
5293  return mem;
5294 }
#define MAX_SIZE_T
Definition: mymalloc.cc:545
#define USAGE_ERROR_ACTION(m, p)
Definition: mymalloc.cc:2642
#define mem2chunk(mem)
Definition: mymalloc.cc:2092
struct malloc_state * mstate
Definition: mymalloc.cc:2470
#define ok_magic(M)
Definition: mymalloc.cc:2887
#define internal_malloc(m, b)
Definition: mymalloc.cc:3645
#define calloc_must_clear(p)
Definition: mymalloc.cc:2167
size_t mspace_footprint ( mspace  msp)

Definition at line 5375 of file mymalloc.cc.

References malloc_state::footprint, python.hepunit::ms, ok_magic, and USAGE_ERROR_ACTION.

5375  {
5376  size_t result = 0;
5377  mstate ms = (mstate)msp;
5378  if (ok_magic(ms)) {
5379  result = ms->footprint;
5380  }
5381  else {
5382  USAGE_ERROR_ACTION(ms,ms);
5383  }
5384  return result;
5385 }
#define USAGE_ERROR_ACTION(m, p)
Definition: mymalloc.cc:2642
struct malloc_state * mstate
Definition: mymalloc.cc:2470
#define ok_magic(M)
Definition: mymalloc.cc:2887
size_t footprint
Definition: mymalloc.cc:2459
void mspace_free ( mspace  msp,
void mem 
)

Definition at line 5175 of file mymalloc.cc.

References CALL_MUNMAP, check_free_chunk, check_inuse_chunk, chunk_minus_offset, chunk_plus_offset, chunksize, cinuse, malloc_state::dv, malloc_state::dvsize, fm, malloc_state::footprint, malloc_chunk::head, insert_large_chunk, insert_small_chunk, INUSE_BITS, is_mmapped, is_small, mem2chunk, MMAP_FOOT_PAD, ok_address, ok_inuse, ok_magic, ok_next, ok_pinuse, pinuse, PINUSE_BIT, POSTACTION, PREACTION, malloc_chunk::prev_foot, malloc_state::release_checks, RTCHECK, set_free_with_pinuse, set_size_and_pinuse_of_free_chunk, should_trim, malloc_state::top, malloc_state::topsize, unlink_chunk, and USAGE_ERROR_ACTION.

Referenced by cfree(), free(), and mspace_realloc().

5175  {
5176  if (mem != 0) {
5177  mchunkptr p = mem2chunk(mem);
5178 #if FOOTERS
5179  mstate fm = get_mstate_for(p);
5180  msp = msp; /* placate people compiling -Wunused */
5181 #else /* FOOTERS */
5182  mstate fm = (mstate)msp;
5183 #endif /* FOOTERS */
5184  if (!ok_magic(fm)) {
5185  USAGE_ERROR_ACTION(fm, p);
5186  return;
5187  }
5188  if (!PREACTION(fm)) {
5189  check_inuse_chunk(fm, p);
5190  if (RTCHECK(ok_address(fm, p) && ok_inuse(p))) {
5191  size_t psize = chunksize(p);
5192  mchunkptr next = chunk_plus_offset(p, psize);
5193  if (!pinuse(p)) {
5194  size_t prevsize = p->prev_foot;
5195  if (is_mmapped(p)) {
5196  psize += prevsize + MMAP_FOOT_PAD;
5197  if (CALL_MUNMAP((char*)p - prevsize, psize) == 0)
5198  fm->footprint -= psize;
5199  goto postaction;
5200  }
5201  else {
5202  mchunkptr prev = chunk_minus_offset(p, prevsize);
5203  psize += prevsize;
5204  p = prev;
5205  if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */
5206  if (p != fm->dv) {
5207  unlink_chunk(fm, p, prevsize);
5208  }
5209  else if ((next->head & INUSE_BITS) == INUSE_BITS) {
5210  fm->dvsize = psize;
5211  set_free_with_pinuse(p, psize, next);
5212  goto postaction;
5213  }
5214  }
5215  else
5216  goto erroraction;
5217  }
5218  }
5219 
5220  if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) {
5221  if (!cinuse(next)) { /* consolidate forward */
5222  if (next == fm->top) {
5223  size_t tsize = fm->topsize += psize;
5224  fm->top = p;
5225  p->head = tsize | PINUSE_BIT;
5226  if (p == fm->dv) {
5227  fm->dv = 0;
5228  fm->dvsize = 0;
5229  }
5230  if (should_trim(fm, tsize))
5231  sys_trim(fm, 0);
5232  goto postaction;
5233  }
5234  else if (next == fm->dv) {
5235  size_t dsize = fm->dvsize += psize;
5236  fm->dv = p;
5238  goto postaction;
5239  }
5240  else {
5241  size_t nsize = chunksize(next);
5242  psize += nsize;
5243  unlink_chunk(fm, next, nsize);
5245  if (p == fm->dv) {
5246  fm->dvsize = psize;
5247  goto postaction;
5248  }
5249  }
5250  }
5251  else
5252  set_free_with_pinuse(p, psize, next);
5253 
5254  if (is_small(psize)) {
5255  insert_small_chunk(fm, p, psize);
5256  check_free_chunk(fm, p);
5257  }
5258  else {
5259  tchunkptr tp = (tchunkptr)p;
5260  insert_large_chunk(fm, tp, psize);
5261  check_free_chunk(fm, p);
5262  if (--fm->release_checks == 0)
5263  release_unused_segments(fm);
5264  }
5265  goto postaction;
5266  }
5267  }
5268  erroraction:
5269  USAGE_ERROR_ACTION(fm, p);
5270  postaction:
5271  POSTACTION(fm);
5272  }
5273  }
5274 }
#define chunk_minus_offset(p, s)
Definition: mymalloc.cc:2140
#define pinuse(p)
Definition: mymalloc.cc:2130
mchunkptr top
Definition: mymalloc.cc:2453
struct malloc_tree_chunk * tchunkptr
Definition: mymalloc.cc:2276
#define insert_small_chunk(M, P, S)
Definition: mymalloc.cc:3415
#define CALL_MUNMAP(a, s)
Definition: mymalloc.cc:1578
#define PINUSE_BIT
Definition: mymalloc.cc:2119
const char * p
Definition: xmltok.h:285
#define is_small(s)
Definition: mymalloc.cc:2682
#define is_mmapped(p)
Definition: mymalloc.cc:2132
size_t release_checks
Definition: mymalloc.cc:2455
#define chunk_plus_offset(p, s)
Definition: mymalloc.cc:2139
#define POSTACTION(M)
Definition: mymalloc.cc:2611
#define cinuse(p)
Definition: mymalloc.cc:2129
#define ok_pinuse(p)
Definition: mymalloc.cc:2874
size_t head
Definition: mymalloc.cc:2059
#define chunksize(p)
Definition: mymalloc.cc:2134
#define USAGE_ERROR_ACTION(m, p)
Definition: mymalloc.cc:2642
size_t prev_foot
Definition: mymalloc.cc:2058
#define PREACTION(M)
Definition: mymalloc.cc:2607
#define MMAP_FOOT_PAD
Definition: mymalloc.cc:2084
#define mem2chunk(mem)
Definition: mymalloc.cc:2092
struct malloc_state * mstate
Definition: mymalloc.cc:2470
#define unlink_chunk(M, P, S)
Definition: mymalloc.cc:3633
#define should_trim(M, s)
Definition: mymalloc.cc:2578
#define check_free_chunk(M, P)
Definition: mymalloc.cc:2651
#define set_size_and_pinuse_of_free_chunk(p, s)
Definition: mymalloc.cc:2154
#define check_inuse_chunk(M, P)
Definition: mymalloc.cc:2652
#define ok_inuse(p)
Definition: mymalloc.cc:2872
#define insert_large_chunk(M, X, S)
Definition: mymalloc.cc:3488
#define fm
#define ok_next(p, n)
Definition: mymalloc.cc:2870
size_t topsize
Definition: mymalloc.cc:2450
#define ok_address(M, a)
Definition: mymalloc.cc:2868
size_t dvsize
Definition: mymalloc.cc:2449
#define ok_magic(M)
Definition: mymalloc.cc:2887
mchunkptr dv
Definition: mymalloc.cc:2452
size_t footprint
Definition: mymalloc.cc:2459
#define INUSE_BITS
Definition: mymalloc.cc:2122
#define RTCHECK(e)
Definition: mymalloc.cc:2896
#define set_free_with_pinuse(p, s, n)
Definition: mymalloc.cc:2158
void** mspace_independent_calloc ( mspace  msp,
size_t  n_elements,
size_t  elem_size,
void chunks[] 
)

Definition at line 5329 of file mymalloc.cc.

References python.hepunit::ms, ok_magic, and USAGE_ERROR_ACTION.

5330  {
5331  size_t sz = elem_size; /* serves as 1-element array */
5332  mstate ms = (mstate)msp;
5333  if (!ok_magic(ms)) {
5334  USAGE_ERROR_ACTION(ms,ms);
5335  return 0;
5336  }
5337  return ialloc(ms, n_elements, &sz, 3, chunks);
5338 }
#define USAGE_ERROR_ACTION(m, p)
Definition: mymalloc.cc:2642
struct malloc_state * mstate
Definition: mymalloc.cc:2470
#define ok_magic(M)
Definition: mymalloc.cc:2887
void** mspace_independent_comalloc ( mspace  msp,
size_t  n_elements,
size_t  sizes[],
void chunks[] 
)

Definition at line 5340 of file mymalloc.cc.

References python.hepunit::ms, ok_magic, and USAGE_ERROR_ACTION.

5341  {
5342  mstate ms = (mstate)msp;
5343  if (!ok_magic(ms)) {
5344  USAGE_ERROR_ACTION(ms,ms);
5345  return 0;
5346  }
5347  return ialloc(ms, n_elements, sizes, 0, chunks);
5348 }
#define USAGE_ERROR_ACTION(m, p)
Definition: mymalloc.cc:2642
struct malloc_state * mstate
Definition: mymalloc.cc:2470
#define ok_magic(M)
Definition: mymalloc.cc:2887
struct mallinfo mspace_mallinfo ( mspace  msp)

Definition at line 5402 of file mymalloc.cc.

References python.hepunit::ms, ok_magic, and USAGE_ERROR_ACTION.

5402  {
5403  mstate ms = (mstate)msp;
5404  if (!ok_magic(ms)) {
5405  USAGE_ERROR_ACTION(ms,ms);
5406  }
5407  return internal_mallinfo(ms);
5408 }
#define USAGE_ERROR_ACTION(m, p)
Definition: mymalloc.cc:2642
struct malloc_state * mstate
Definition: mymalloc.cc:2470
#define ok_magic(M)
Definition: mymalloc.cc:2887
void* mspace_malloc ( mspace  msp,
size_t  bytes 
)

Definition at line 5061 of file mymalloc.cc.

References assert, test::b, check_malloced_chunk, check_top_chunk, chunk2mem, chunk_plus_offset, chunksize, compute_bit2idx, malloc_state::dv, malloc_state::dvsize, malloc_chunk::fd, malloc_chunk::head, idx2bit, least_bit, left_bits, MAX_REQUEST, MAX_SIZE_T, MAX_SMALL_REQUEST, MIN_CHUNK_SIZE, MIN_REQUEST, python.hepunit::ms, ok_magic, pad_request, PINUSE_BIT, POSTACTION, PREACTION, replace_dv, set_inuse_and_pinuse, set_size_and_pinuse_of_free_chunk, set_size_and_pinuse_of_inuse_chunk, SIZE_T_SIZE, small_index, small_index2size, smallbin_at, malloc_state::smallmap, malloc_state::top, malloc_state::topsize, malloc_state::treemap, unlink_first_small_chunk, and USAGE_ERROR_ACTION.

Referenced by malloc(), mspace_realloc(), and valloc().

5061  {
5062  mstate ms = (mstate)msp;
5063  if (!ok_magic(ms)) {
5064  USAGE_ERROR_ACTION(ms,ms);
5065  return 0;
5066  }
5067  if (!PREACTION(ms)) {
5068  void* mem;
5069  size_t nb;
5070  if (bytes <= MAX_SMALL_REQUEST) {
5071  bindex_t idx;
5072  binmap_t smallbits;
5073  nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes);
5074  idx = small_index(nb);
5075  smallbits = ms->smallmap >> idx;
5076 
5077  if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */
5078  mchunkptr b, p;
5079  idx += ~smallbits & 1; /* Uses next bin if idx empty */
5080  b = smallbin_at(ms, idx);
5081  p = b->fd;
5082  assert(chunksize(p) == small_index2size(idx));
5083  unlink_first_small_chunk(ms, b, p, idx);
5085  mem = chunk2mem(p);
5086  check_malloced_chunk(ms, mem, nb);
5087  goto postaction;
5088  }
5089 
5090  else if (nb > ms->dvsize) {
5091  if (smallbits != 0) { /* Use chunk in next nonempty smallbin */
5092  mchunkptr b, p, r;
5093  size_t rsize;
5094  bindex_t i;
5095  binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx));
5096  binmap_t leastbit = least_bit(leftbits);
5097  compute_bit2idx(leastbit, i);
5098  b = smallbin_at(ms, i);
5099  p = b->fd;
5100  assert(chunksize(p) == small_index2size(i));
5101  unlink_first_small_chunk(ms, b, p, i);
5102  rsize = small_index2size(i) - nb;
5103  /* Fit here cannot be remainderless if 4byte sizes */
5104  if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE)
5106  else {
5108  r = chunk_plus_offset(p, nb);
5110  replace_dv(ms, r, rsize);
5111  }
5112  mem = chunk2mem(p);
5113  check_malloced_chunk(ms, mem, nb);
5114  goto postaction;
5115  }
5116 
5117  else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) {
5118  check_malloced_chunk(ms, mem, nb);
5119  goto postaction;
5120  }
5121  }
5122  }
5123  else if (bytes >= MAX_REQUEST)
5124  nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */
5125  else {
5126  nb = pad_request(bytes);
5127  if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) {
5128  check_malloced_chunk(ms, mem, nb);
5129  goto postaction;
5130  }
5131  }
5132 
5133  if (nb <= ms->dvsize) {
5134  size_t rsize = ms->dvsize - nb;
5135  mchunkptr p = ms->dv;
5136  if (rsize >= MIN_CHUNK_SIZE) { /* split dv */
5137  mchunkptr r = ms->dv = chunk_plus_offset(p, nb);
5138  ms->dvsize = rsize;
5141  }
5142  else { /* exhaust dv */
5143  size_t dvs = ms->dvsize;
5144  ms->dvsize = 0;
5145  ms->dv = 0;
5146  set_inuse_and_pinuse(ms, p, dvs);
5147  }
5148  mem = chunk2mem(p);
5149  check_malloced_chunk(ms, mem, nb);
5150  goto postaction;
5151  }
5152 
5153  else if (nb < ms->topsize) { /* Split top */
5154  size_t rsize = ms->topsize -= nb;
5155  mchunkptr p = ms->top;
5156  mchunkptr r = ms->top = chunk_plus_offset(p, nb);
5157  r->head = rsize | PINUSE_BIT;
5159  mem = chunk2mem(p);
5160  check_top_chunk(ms, ms->top);
5161  check_malloced_chunk(ms, mem, nb);
5162  goto postaction;
5163  }
5164 
5165  mem = sys_alloc(ms, nb);
5166 
5167  postaction:
5168  POSTACTION(ms);
5169  return mem;
5170  }
5171 
5172  return 0;
5173 }
mchunkptr top
Definition: mymalloc.cc:2453
#define idx2bit(i)
Definition: mymalloc.cc:2774
#define MAX_SIZE_T
Definition: mymalloc.cc:545
#define unlink_first_small_chunk(M, B, P, I)
Definition: mymalloc.cc:3454
#define small_index2size(i)
Definition: mymalloc.cc:2684
#define PINUSE_BIT
Definition: mymalloc.cc:2119
const char * p
Definition: xmltok.h:285
#define assert(x)
Definition: mymalloc.cc:1309
#define chunk_plus_offset(p, s)
Definition: mymalloc.cc:2139
#define POSTACTION(M)
Definition: mymalloc.cc:2611
#define smallbin_at(M, i)
Definition: mymalloc.cc:2688
#define chunk2mem(p)
Definition: mymalloc.cc:2091
unsigned int bindex_t
Definition: mymalloc.cc:2067
size_t head
Definition: mymalloc.cc:2059
#define left_bits(x)
Definition: mymalloc.cc:2789
#define chunksize(p)
Definition: mymalloc.cc:2134
#define USAGE_ERROR_ACTION(m, p)
Definition: mymalloc.cc:2642
unsigned int binmap_t
Definition: mymalloc.cc:2068
#define MIN_REQUEST
Definition: mymalloc.cc:2098
#define PREACTION(M)
Definition: mymalloc.cc:2607
#define compute_bit2idx(X, I)
Definition: mymalloc.cc:2824
binmap_t smallmap
Definition: mymalloc.cc:2447
struct malloc_state * mstate
Definition: mymalloc.cc:2470
struct malloc_chunk * fd
Definition: mymalloc.cc:2060
#define small_index(s)
Definition: mymalloc.cc:2683
#define check_top_chunk(M, P)
Definition: mymalloc.cc:2656
binmap_t treemap
Definition: mymalloc.cc:2448
#define set_size_and_pinuse_of_free_chunk(p, s)
Definition: mymalloc.cc:2154
#define MAX_REQUEST
Definition: mymalloc.cc:2097
#define check_malloced_chunk(M, P, N)
Definition: mymalloc.cc:2653
size_t topsize
Definition: mymalloc.cc:2450
#define SIZE_T_SIZE
Definition: mymalloc.cc:1441
size_t dvsize
Definition: mymalloc.cc:2449
#define set_size_and_pinuse_of_inuse_chunk(M, p, s)
Definition: mymalloc.cc:2921
#define ok_magic(M)
Definition: mymalloc.cc:2887
#define replace_dv(M, P, S)
Definition: mymalloc.cc:3474
mchunkptr dv
Definition: mymalloc.cc:2452
#define pad_request(req)
Definition: mymalloc.cc:2101
#define least_bit(x)
Definition: mymalloc.cc:2786
#define MIN_CHUNK_SIZE
Definition: mymalloc.cc:2087
#define MAX_SMALL_REQUEST
Definition: mymalloc.cc:2444
#define set_inuse_and_pinuse(M, p, s)
Definition: mymalloc.cc:2916
void mspace_malloc_stats ( mspace  msp)

Definition at line 5365 of file mymalloc.cc.

References python.hepunit::ms, ok_magic, and USAGE_ERROR_ACTION.

5365  {
5366  mstate ms = (mstate)msp;
5367  if (ok_magic(ms)) {
5368  internal_malloc_stats(ms);
5369  }
5370  else {
5371  USAGE_ERROR_ACTION(ms,ms);
5372  }
5373 }
#define USAGE_ERROR_ACTION(m, p)
Definition: mymalloc.cc:2642
struct malloc_state * mstate
Definition: mymalloc.cc:2470
#define ok_magic(M)
Definition: mymalloc.cc:2887
int mspace_mallopt ( int  param_number,
int  value 
)

Definition at line 5420 of file mymalloc.cc.

5420  {
5421  return change_mparam(param_number, value);
5422 }
const XML_Char int const XML_Char * value
size_t mspace_max_footprint ( mspace  msp)

Definition at line 5388 of file mymalloc.cc.

References malloc_state::max_footprint, python.hepunit::ms, ok_magic, and USAGE_ERROR_ACTION.

5388  {
5389  size_t result = 0;
5390  mstate ms = (mstate)msp;
5391  if (ok_magic(ms)) {
5392  result = ms->max_footprint;
5393  }
5394  else {
5395  USAGE_ERROR_ACTION(ms,ms);
5396  }
5397  return result;
5398 }
size_t max_footprint
Definition: mymalloc.cc:2460
#define USAGE_ERROR_ACTION(m, p)
Definition: mymalloc.cc:2642
struct malloc_state * mstate
Definition: mymalloc.cc:2470
#define ok_magic(M)
Definition: mymalloc.cc:2887
void* mspace_memalign ( mspace  msp,
size_t  alignment,
size_t  bytes 
)

Definition at line 5320 of file mymalloc.cc.

References python.hepunit::ms, ok_magic, and USAGE_ERROR_ACTION.

5320  {
5321  mstate ms = (mstate)msp;
5322  if (!ok_magic(ms)) {
5323  USAGE_ERROR_ACTION(ms,ms);
5324  return 0;
5325  }
5326  return internal_memalign(ms, alignment, bytes);
5327 }
#define USAGE_ERROR_ACTION(m, p)
Definition: mymalloc.cc:2642
struct malloc_state * mstate
Definition: mymalloc.cc:2470
#define ok_magic(M)
Definition: mymalloc.cc:2887
void* mspace_realloc ( mspace  msp,
void mem,
size_t  newsize 
)

Definition at line 5296 of file mymalloc.cc.

References mem2chunk, python.hepunit::ms, mspace_free(), mspace_malloc(), ok_magic, and USAGE_ERROR_ACTION.

Referenced by realloc().

5296  {
5297  if (oldmem == 0)
5298  return mspace_malloc(msp, bytes);
5299 #ifdef REALLOC_ZERO_BYTES_FREES
5300  if (bytes == 0) {
5301  mspace_free(msp, oldmem);
5302  return 0;
5303  }
5304 #endif /* REALLOC_ZERO_BYTES_FREES */
5305  else {
5306 #if FOOTERS
5307  mchunkptr p = mem2chunk(oldmem);
5308  mstate ms = get_mstate_for(p);
5309 #else /* FOOTERS */
5310  mstate ms = (mstate)msp;
5311 #endif /* FOOTERS */
5312  if (!ok_magic(ms)) {
5313  USAGE_ERROR_ACTION(ms,ms);
5314  return 0;
5315  }
5316  return internal_realloc(ms, oldmem, bytes);
5317  }
5318 }
void * mspace_malloc(mspace msp, size_t bytes)
Definition: mymalloc.cc:5061
const char * p
Definition: xmltok.h:285
#define USAGE_ERROR_ACTION(m, p)
Definition: mymalloc.cc:2642
#define mem2chunk(mem)
Definition: mymalloc.cc:2092
void mspace_free(mspace msp, void *mem)
Definition: mymalloc.cc:5175
struct malloc_state * mstate
Definition: mymalloc.cc:2470
#define ok_magic(M)
Definition: mymalloc.cc:2887
int mspace_track_large_chunks ( mspace  msp,
int  enable 
)

Definition at line 5019 of file mymalloc.cc.

References disable_mmap, enable_mmap, python.hepunit::ms, POSTACTION, PREACTION, and use_mmap.

5019  {
5020  int ret = 0;
5021  mstate ms = (mstate)msp;
5022  if (!PREACTION(ms)) {
5023  if (!use_mmap(ms))
5024  ret = 1;
5025  if (!enable)
5026  enable_mmap(ms);
5027  else
5028  disable_mmap(ms);
5029  POSTACTION(ms);
5030  }
5031  return ret;
5032 }
#define use_mmap(M)
Definition: mymalloc.cc:2514
#define POSTACTION(M)
Definition: mymalloc.cc:2611
#define PREACTION(M)
Definition: mymalloc.cc:2607
#define disable_mmap(M)
Definition: mymalloc.cc:2516
#define enable_mmap(M)
Definition: mymalloc.cc:2515
struct malloc_state * mstate
Definition: mymalloc.cc:2470
int mspace_trim ( mspace  msp,
size_t  pad 
)

Definition at line 5350 of file mymalloc.cc.

References python.hepunit::ms, ok_magic, POSTACTION, PREACTION, and USAGE_ERROR_ACTION.

5350  {
5351  int result = 0;
5352  mstate ms = (mstate)msp;
5353  if (ok_magic(ms)) {
5354  if (!PREACTION(ms)) {
5355  result = sys_trim(ms, pad);
5356  POSTACTION(ms);
5357  }
5358  }
5359  else {
5360  USAGE_ERROR_ACTION(ms,ms);
5361  }
5362  return result;
5363 }
#define POSTACTION(M)
Definition: mymalloc.cc:2611
#define USAGE_ERROR_ACTION(m, p)
Definition: mymalloc.cc:2642
#define PREACTION(M)
Definition: mymalloc.cc:2607
struct malloc_state * mstate
Definition: mymalloc.cc:2470
#define ok_magic(M)
Definition: mymalloc.cc:2887
size_t mspace_usable_size ( void mem)

Definition at line 5411 of file mymalloc.cc.

References chunksize, is_inuse, mem2chunk, and overhead_for.

5411  {
5412  if (mem != 0) {
5413  mchunkptr p = mem2chunk(mem);
5414  if (is_inuse(p))
5415  return chunksize(p) - overhead_for(p);
5416  }
5417  return 0;
5418 }
const char * p
Definition: xmltok.h:285
#define chunksize(p)
Definition: mymalloc.cc:2134
#define mem2chunk(mem)
Definition: mymalloc.cc:2092
#define is_inuse(p)
Definition: mymalloc.cc:2131
#define overhead_for(p)
Definition: mymalloc.cc:2162