b2c31660be
Extract profiling code from malloc(), imemalign(), calloc(), realloc(), mallocx(), rallocx(), and xallocx(). This slightly reduces the amount of code compiled into the fast paths, but the primary benefit is the combinatorial complexity reduction. Simplify iralloc[t]() by creating a separate ixalloc() that handles the no-move cases. Further simplify [mrxn]allocx() (and by implication [mrn]allocm()) to make request size overflows due to size class and/or alignment constraints trigger undefined behavior (detected by debug-only assertions). Report ENOMEM rather than EINVAL if an OOM occurs during heap profiling backtrace creation in imemalign(). This bug impacted posix_memalign() and aligned_alloc().
45 lines
1.5 KiB
C
45 lines
1.5 KiB
C
/******************************************************************************/
|
|
#ifdef JEMALLOC_H_TYPES
|
|
|
|
#endif /* JEMALLOC_H_TYPES */
|
|
/******************************************************************************/
|
|
#ifdef JEMALLOC_H_STRUCTS
|
|
|
|
#endif /* JEMALLOC_H_STRUCTS */
|
|
/******************************************************************************/
|
|
#ifdef JEMALLOC_H_EXTERNS
|
|
|
|
/* Huge allocation statistics. */
|
|
extern uint64_t huge_nmalloc;
|
|
extern uint64_t huge_ndalloc;
|
|
extern size_t huge_allocated;
|
|
|
|
/* Protects chunk-related data structures. */
|
|
extern malloc_mutex_t huge_mtx;
|
|
|
|
void *huge_malloc(size_t size, bool zero);
|
|
void *huge_palloc(size_t size, size_t alignment, bool zero);
|
|
bool huge_ralloc_no_move(void *ptr, size_t oldsize, size_t size,
|
|
size_t extra);
|
|
void *huge_ralloc(void *ptr, size_t oldsize, size_t size, size_t extra,
|
|
size_t alignment, bool zero, bool try_tcache_dalloc);
|
|
#ifdef JEMALLOC_JET
|
|
typedef void (huge_dalloc_junk_t)(void *, size_t);
|
|
extern huge_dalloc_junk_t *huge_dalloc_junk;
|
|
#endif
|
|
void huge_dalloc(void *ptr, bool unmap);
|
|
size_t huge_salloc(const void *ptr);
|
|
prof_ctx_t *huge_prof_ctx_get(const void *ptr);
|
|
void huge_prof_ctx_set(const void *ptr, prof_ctx_t *ctx);
|
|
bool huge_boot(void);
|
|
void huge_prefork(void);
|
|
void huge_postfork_parent(void);
|
|
void huge_postfork_child(void);
|
|
|
|
#endif /* JEMALLOC_H_EXTERNS */
|
|
/******************************************************************************/
|
|
#ifdef JEMALLOC_H_INLINES
|
|
|
|
#endif /* JEMALLOC_H_INLINES */
|
|
/******************************************************************************/
|