520#ifdef TMEMORY_USE_DLMALLOC
523#ifndef DLMALLOC_VERSION
524#define DLMALLOC_VERSION 20806
527#ifndef DLMALLOC_EXPORT
528#define DLMALLOC_EXPORT extern
541#define WIN32_LEAN_AND_MEAN
545#define HAVE_MORECORE 0
546#define LACKS_UNISTD_H
547#define LACKS_SYS_PARAM_H
548#define LACKS_SYS_MMAN_H
549#define LACKS_STRING_H
550#define LACKS_STRINGS_H
551#define LACKS_SYS_TYPES_H
554#ifndef MALLOC_FAILURE_ACTION
555#define MALLOC_FAILURE_ACTION
566#if defined(DARWIN) || defined(_DARWIN)
569#define HAVE_MORECORE 0
572#ifndef MALLOC_ALIGNMENT
573#define MALLOC_ALIGNMENT ((size_t)16U)
578#ifndef LACKS_SYS_TYPES_H
579#include <sys/types.h>
583#define MAX_SIZE_T (~(size_t)0)
586#define USE_LOCKS ((defined(USE_SPIN_LOCKS) && USE_SPIN_LOCKS != 0) || \
587 (defined(USE_RECURSIVE_LOCKS) && USE_RECURSIVE_LOCKS != 0))
591#if ((defined(__GNUC__) && \
592 ((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) || \
593 defined(__i386__) || defined(__x86_64__))) || \
594 (defined(_MSC_VER) && _MSC_VER>=1310))
595#ifndef USE_SPIN_LOCKS
596#define USE_SPIN_LOCKS 1
599#error "USE_SPIN_LOCKS defined without implementation"
601#elif !defined(USE_SPIN_LOCKS)
602#define USE_SPIN_LOCKS 0
606#define ONLY_MSPACES 0
615#ifndef MALLOC_ALIGNMENT
616#define MALLOC_ALIGNMENT ((size_t)(2 * sizeof(void *)))
624#ifndef ABORT_ON_ASSERT_FAILURE
625#define ABORT_ON_ASSERT_FAILURE 1
627#ifndef PROCEED_ON_ERROR
628#define PROCEED_ON_ERROR 0
634#ifndef MALLOC_INSPECT_ALL
635#define MALLOC_INSPECT_ALL 0
651#ifndef MALLOC_FAILURE_ACTION
652#define MALLOC_FAILURE_ACTION errno = ENOMEM;
656#define HAVE_MORECORE 0
658#define HAVE_MORECORE 1
662#define MORECORE_CONTIGUOUS 0
664#define MORECORE_DEFAULT sbrk
665#ifndef MORECORE_CONTIGUOUS
666#define MORECORE_CONTIGUOUS 1
669#ifndef DEFAULT_GRANULARITY
670#if (MORECORE_CONTIGUOUS || defined(WIN32))
671#define DEFAULT_GRANULARITY (0)
673#define DEFAULT_GRANULARITY ((size_t)64U * (size_t)1024U)
676#ifndef DEFAULT_TRIM_THRESHOLD
677#ifndef MORECORE_CANNOT_TRIM
678#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U)
680#define DEFAULT_TRIM_THRESHOLD MAX_SIZE_T
683#ifndef DEFAULT_MMAP_THRESHOLD
685#define DEFAULT_MMAP_THRESHOLD ((size_t)256U * (size_t)1024U)
687#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T
690#ifndef MAX_RELEASE_CHECK_RATE
692#define MAX_RELEASE_CHECK_RATE 4095
694#define MAX_RELEASE_CHECK_RATE MAX_SIZE_T
697#ifndef USE_BUILTIN_FFS
698#define USE_BUILTIN_FFS 0
703#ifndef MALLINFO_FIELD_TYPE
704#define MALLINFO_FIELD_TYPE size_t
706#ifndef NO_MALLOC_STATS
707#define NO_MALLOC_STATS 0
709#ifndef NO_SEGMENT_TRAVERSAL
710#define NO_SEGMENT_TRAVERSAL 0
720#define M_TRIM_THRESHOLD (-1)
721#define M_GRANULARITY (-2)
722#define M_MMAP_THRESHOLD (-3)
749#ifdef HAVE_USR_INCLUDE_MALLOC_H
752#ifndef STRUCT_MALLINFO_DECLARED
754#define _STRUCT_MALLINFO
755#define STRUCT_MALLINFO_DECLARED 1
757 MALLINFO_FIELD_TYPE arena;
758 MALLINFO_FIELD_TYPE ordblks;
759 MALLINFO_FIELD_TYPE smblks;
760 MALLINFO_FIELD_TYPE hblks;
761 MALLINFO_FIELD_TYPE hblkhd;
762 MALLINFO_FIELD_TYPE usmblks;
763 MALLINFO_FIELD_TYPE fsmblks;
764 MALLINFO_FIELD_TYPE uordblks;
765 MALLINFO_FIELD_TYPE fordblks;
766 MALLINFO_FIELD_TYPE keepcost;
779#define FORCEINLINE __inline __attribute__ ((always_inline))
780#elif defined(_MSC_VER)
781#define FORCEINLINE __forceinline
786#define NOINLINE __attribute__ ((noinline))
787#elif defined(_MSC_VER)
788#define NOINLINE __declspec(noinline)
797#define FORCEINLINE inline
809#define dlmemalign memalign
810#define dlposix_memalign posix_memalign
811#define dlrealloc_in_place realloc_in_place
812#define dlvalloc valloc
813#define dlpvalloc pvalloc
814#define dlmallinfo mallinfo
815#define dlmallopt mallopt
816#define dlmalloc_trim malloc_trim
817#define dlmalloc_stats malloc_stats
818#define dlmalloc_usable_size malloc_usable_size
819#define dlmalloc_footprint malloc_footprint
820#define dlmalloc_max_footprint malloc_max_footprint
821#define dlmalloc_footprint_limit malloc_footprint_limit
822#define dlmalloc_set_footprint_limit malloc_set_footprint_limit
823#define dlmalloc_inspect_all malloc_inspect_all
824#define dlindependent_calloc independent_calloc
825#define dlindependent_comalloc independent_comalloc
826#define dlbulk_free bulk_free
843 DLMALLOC_EXPORT
void* dlmalloc(
size_t);
852 DLMALLOC_EXPORT
void dlfree(
void*);
859 DLMALLOC_EXPORT
void* dlcalloc(
size_t,
size_t);
883 DLMALLOC_EXPORT
void* dlrealloc(
void*,
size_t);
898 DLMALLOC_EXPORT
void* dlrealloc_in_place(
void*,
size_t);
912 DLMALLOC_EXPORT
void* dlmemalign(
size_t,
size_t);
922 DLMALLOC_EXPORT
int dlposix_memalign(
void**,
size_t,
size_t);
929 DLMALLOC_EXPORT
void* dlvalloc(
size_t);
953 DLMALLOC_EXPORT
int dlmallopt(
int,
int);
964 DLMALLOC_EXPORT
size_t dlmalloc_footprint(
void);
977 DLMALLOC_EXPORT
size_t dlmalloc_max_footprint(
void);
988 DLMALLOC_EXPORT
size_t dlmalloc_footprint_limit();
1002 DLMALLOC_EXPORT
size_t dlmalloc_set_footprint_limit(
size_t bytes);
1004#if MALLOC_INSPECT_ALL
1033 DLMALLOC_EXPORT
void dlmalloc_inspect_all(
void(*handler)(
void*,
void*,
size_t,
void*),
1061 DLMALLOC_EXPORT
struct mallinfo dlmallinfo(void);
1113 DLMALLOC_EXPORT
void** dlindependent_calloc(
size_t,
size_t,
void**);
1171 DLMALLOC_EXPORT
void** dlindependent_comalloc(
size_t,
size_t*,
void**);
1182 DLMALLOC_EXPORT
size_t dlbulk_free(
void**,
size_t n_elements);
1189 DLMALLOC_EXPORT
void* dlpvalloc(
size_t);
1212 DLMALLOC_EXPORT
int dlmalloc_trim(
size_t);
1233 DLMALLOC_EXPORT
void dlmalloc_stats(
void);
1249 size_t dlmalloc_usable_size(
void*);
1259 typedef void* mspace;
1272 DLMALLOC_EXPORT mspace create_mspace(
size_t capacity,
int locked);
1280 DLMALLOC_EXPORT
size_t destroy_mspace(mspace msp);
1291 DLMALLOC_EXPORT mspace create_mspace_with_base(
void* base,
size_t capacity,
int locked);
1304 DLMALLOC_EXPORT
int mspace_track_large_chunks(mspace msp,
int enable);
1311 DLMALLOC_EXPORT
void* mspace_malloc(mspace msp,
size_t bytes);
1321 DLMALLOC_EXPORT
void mspace_free(mspace msp,
void* mem);
1332 DLMALLOC_EXPORT
void* mspace_realloc(mspace msp,
void* mem,
size_t newsize);
1338 DLMALLOC_EXPORT
void* mspace_calloc(mspace msp,
size_t n_elements,
size_t elem_size);
1344 DLMALLOC_EXPORT
void* mspace_memalign(mspace msp,
size_t alignment,
size_t bytes);
1350 DLMALLOC_EXPORT
void** mspace_independent_calloc(mspace msp,
size_t n_elements,
1351 size_t elem_size,
void* chunks[]);
1357 DLMALLOC_EXPORT
void** mspace_independent_comalloc(mspace msp,
size_t n_elements,
1358 size_t sizes[],
void* chunks[]);
1364 DLMALLOC_EXPORT
size_t mspace_footprint(mspace msp);
1370 DLMALLOC_EXPORT
size_t mspace_max_footprint(mspace msp);
1378 DLMALLOC_EXPORT
struct mallinfo mspace_mallinfo(mspace msp);
1384 DLMALLOC_EXPORT
size_t mspace_usable_size(
const void* mem);
1390 DLMALLOC_EXPORT
void mspace_malloc_stats(mspace msp);
1396 DLMALLOC_EXPORT
int mspace_trim(mspace msp,
size_t pad);
1401 DLMALLOC_EXPORT
int mspace_mallopt(
int,
int);
1403 DLMALLOC_EXPORT
void* get_mspace_from_ptr(
void* ptr);