mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
38 lines
1.4 KiB
PHP
38 lines
1.4 KiB
PHP
|
|
||
|
/* ------------------- Chunks sizes and alignments ----------------------- */
|
||
|
|
||
|
#define MCHUNK_SIZE (sizeof(mchunk))
|
||
|
|
||
|
#if FOOTERS
|
||
|
#define CHUNK_OVERHEAD (TWO_SIZE_T_SIZES)
|
||
|
#else /* FOOTERS */
|
||
|
#define CHUNK_OVERHEAD (SIZE_T_SIZE)
|
||
|
#endif /* FOOTERS */
|
||
|
|
||
|
/* MMapped chunks need a second word of overhead ... */
|
||
|
#define MMAP_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES)
|
||
|
/* ... and additional padding for fake next-chunk at foot */
|
||
|
#define MMAP_FOOT_PAD (FOUR_SIZE_T_SIZES)
|
||
|
|
||
|
/* The smallest size we can malloc is an aligned minimal chunk */
|
||
|
#define MIN_CHUNK_SIZE\
|
||
|
((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK)
|
||
|
|
||
|
/* conversion from malloc headers to user pointers, and back */
|
||
|
#define chunk2mem(p) ((void*)((char*)(p) + TWO_SIZE_T_SIZES))
|
||
|
#define mem2chunk(mem) ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES))
|
||
|
/* chunk associated with aligned address A */
|
||
|
#define align_as_chunk(A) (mchunkptr)((A) + align_offset(chunk2mem(A)))
|
||
|
|
||
|
/* Bounds on request (not chunk) sizes. */
|
||
|
#define MAX_REQUEST ((-MIN_CHUNK_SIZE) << 2)
|
||
|
#define MIN_REQUEST (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE)
|
||
|
|
||
|
/* pad request bytes into a usable size */
|
||
|
#define pad_request(req) \
|
||
|
(((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK)
|
||
|
|
||
|
/* pad request, checking for minimum (but not maximum) */
|
||
|
#define request2size(req) \
|
||
|
(((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req))
|