Update rpmalloc to 1.3.0.

This commit is contained in:
Bartosz Taudul 2018-03-04 15:51:10 +01:00
parent 0c1721144e
commit dca7338319
2 changed files with 1262 additions and 926 deletions

File diff suppressed because it is too large Load Diff

View File

@ -18,13 +18,16 @@ namespace tracy
#if defined(__clang__) || defined(__GNUC__) #if defined(__clang__) || defined(__GNUC__)
# define RPMALLOC_ATTRIBUTE __attribute__((__malloc__)) # define RPMALLOC_ATTRIBUTE __attribute__((__malloc__))
# define RPMALLOC_CALL # define RPMALLOC_RESTRICT
# define RPMALLOC_CDECL
#elif defined(_MSC_VER) #elif defined(_MSC_VER)
# define RPMALLOC_ATTRIBUTE # define RPMALLOC_ATTRIBUTE
# define RPMALLOC_CALL __declspec(restrict) # define RPMALLOC_RESTRICT __declspec(restrict)
# define RPMALLOC_CDECL __cdecl
#else #else
# define RPMALLOC_ATTRIBUTE # define RPMALLOC_ATTRIBUTE
# define RPMALLOC_CALL # define RPMALLOC_RESTRICT
# define RPMALLOC_CDECL
#endif #endif
//! Flag to rpaligned_realloc to not preserve content in reallocation //! Flag to rpaligned_realloc to not preserve content in reallocation
@ -35,8 +38,6 @@ typedef struct rpmalloc_global_statistics_t {
size_t mapped; size_t mapped;
//! Current amount of memory in global caches for small and medium sizes (<64KiB) //! Current amount of memory in global caches for small and medium sizes (<64KiB)
size_t cached; size_t cached;
//! Curren amount of memory in global caches for large sizes (>=64KiB)
size_t cached_large;
//! Total amount of memory mapped (only if ENABLE_STATISTICS=1) //! Total amount of memory mapped (only if ENABLE_STATISTICS=1)
size_t mapped_total; size_t mapped_total;
//! Total amount of memory unmapped (only if ENABLE_STATISTICS=1) //! Total amount of memory unmapped (only if ENABLE_STATISTICS=1)
@ -44,10 +45,6 @@ typedef struct rpmalloc_global_statistics_t {
} rpmalloc_global_statistics_t; } rpmalloc_global_statistics_t;
typedef struct rpmalloc_thread_statistics_t { typedef struct rpmalloc_thread_statistics_t {
//! Amount of memory currently requested in allocations (only if ENABLE_STATISTICS=1)
size_t requested;
//! Amount of memory actually allocated in memory blocks (only if ENABLE_STATISTICS=1)
size_t allocated;
//! Current number of bytes available for allocation from active spans //! Current number of bytes available for allocation from active spans
size_t active; size_t active;
//! Current number of bytes available in thread size class caches //! Current number of bytes available in thread size class caches
@ -62,9 +59,47 @@ typedef struct rpmalloc_thread_statistics_t {
size_t global_to_thread; size_t global_to_thread;
} rpmalloc_thread_statistics_t; } rpmalloc_thread_statistics_t;
typedef struct rpmalloc_config_t {
//! Map memory pages for the given number of bytes. The returned address MUST be
// aligned to the rpmalloc span size, which will always be a power of two.
// Optionally the function can store an alignment offset in the offset variable
// in case it performs alignment and the returned pointer is offset from the
// actual start of the memory region due to this alignment. The alignment offset
// will be passed to the memory unmap function. The alignment offset MUST NOT be
// larger than 65535 (storable in an uint16_t), if it is you must use natural
// alignment to shift it into 16 bits.
void* (*memory_map)(size_t size, size_t* offset);
//! Unmap the memory pages starting at address and spanning the given number of bytes.
// If release is set to 1, the unmap is for an entire span range as returned by
// a previous call to memory_map and that the entire range should be released.
// If release is set to 0, the unmap is a partial decommit of a subset of the mapped
// memory range.
void (*memory_unmap)(void* address, size_t size, size_t offset, int release);
//! Size of memory pages. The page size MUST be a power of two in [512,16384] range
// (2^9 to 2^14) unless 0 - set to 0 to use system page size. All memory mapping
// requests to memory_map will be made with size set to a multiple of the page size.
size_t page_size;
//! Size of a span of memory pages. MUST be a multiple of page size, and in [4096,262144]
// range (unless 0 - set to 0 to use the default span size).
size_t span_size;
//! Number of spans to map at each request to map new virtual memory blocks. This can
// be used to minimize the system call overhead at the cost of virtual memory address
// space. The extra mapped pages will not be written until actually used, so physical
// committed memory should not be affected in the default implementation.
size_t span_map_count;
//! Debug callback if memory guards are enabled. Called if a memory overwrite is detected
void (*memory_overwrite)(void* address);
} rpmalloc_config_t;
extern int extern int
rpmalloc_initialize(void); rpmalloc_initialize(void);
extern int
rpmalloc_initialize_config(const rpmalloc_config_t* config);
extern const rpmalloc_config_t*
rpmalloc_config(void);
extern void extern void
rpmalloc_finalize(void); rpmalloc_finalize(void);
@ -86,13 +121,13 @@ rpmalloc_thread_statistics(rpmalloc_thread_statistics_t* stats);
extern void extern void
rpmalloc_global_statistics(rpmalloc_global_statistics_t* stats); rpmalloc_global_statistics(rpmalloc_global_statistics_t* stats);
extern RPMALLOC_CALL void* extern RPMALLOC_RESTRICT void*
rpmalloc(size_t size) RPMALLOC_ATTRIBUTE; rpmalloc(size_t size) RPMALLOC_ATTRIBUTE;
extern void extern void
rpfree(void* ptr); rpfree(void* ptr);
extern RPMALLOC_CALL void* extern RPMALLOC_RESTRICT void*
rpcalloc(size_t num, size_t size) RPMALLOC_ATTRIBUTE; rpcalloc(size_t num, size_t size) RPMALLOC_ATTRIBUTE;
extern void* extern void*
@ -101,10 +136,10 @@ rprealloc(void* ptr, size_t size);
extern void* extern void*
rpaligned_realloc(void* ptr, size_t alignment, size_t size, size_t oldsize, unsigned int flags); rpaligned_realloc(void* ptr, size_t alignment, size_t size, size_t oldsize, unsigned int flags);
extern RPMALLOC_CALL void* extern RPMALLOC_RESTRICT void*
rpaligned_alloc(size_t alignment, size_t size) RPMALLOC_ATTRIBUTE; rpaligned_alloc(size_t alignment, size_t size) RPMALLOC_ATTRIBUTE;
extern RPMALLOC_CALL void* extern RPMALLOC_RESTRICT void*
rpmemalign(size_t alignment, size_t size) RPMALLOC_ATTRIBUTE; rpmemalign(size_t alignment, size_t size) RPMALLOC_ATTRIBUTE;
extern int extern int