16#include "../../../include/lammp/impl/mparam.h"
17#include "../../../include/lammp/impl/prime_table.h"
18#include "../../../include/lammp/impl/tmp_alloc.h"
19#include "../../../include/lammp/lmmpn.h"
24#undef lmmp_stack_alloc
26#undef lmmp_leak_tracker
27#define HSIZE sizeof(void*)
35#define heap_alloc_func global_heap.alloc
36#define heap_free_func global_heap.free
37#define realloc_func global_heap.realloc
98#if LAMMP_DEBUG_MEMORY_LEAK == 1
107 snprintf(
msg,
sizeof(
msg),
"Memory allocation failed (size: %zu bytes)", size);
111#include "../../../include/lammp/impl/safe_memory.h"
135 "Default stack allocator is not empty. top: %p, begin: %p, end: %p;\n",
141 "Default pool allocator is not empty. top: %p, begin: %p; remain: %zu bytes, capacity: %zu "
152#if LAMMP_DEBUG_MEMORY_CHECK == 1
153void*
lmmp_alloc(
size_t size,
const char* func,
int line) {
156#if LAMMP_DEBUG_MEMORY_LEAK == 1
169#if LAMMP_DEBUG_MEMORY_LEAK == 1
178#if LAMMP_DEBUG_MEMORY_CHECK == 1
192#if LAMMP_DEBUG_MEMORY_CHECK == 1
193void lmmp_free(
void* ptr,
const char* func,
int line) {
196#if LAMMP_DEBUG_MEMORY_LEAK == 1
205#if LAMMP_DEBUG_MEMORY_LEAK == 1
void(* lmmp_heap_free_fn)(void *ptr)
void *(* lmmp_realloc_fn)(void *ptr, size_t size)
void lmmp_abort(lmmp_error_t type, const char *msg, const char *func, int line)
LAMMP 全局退出函数,内部错误或断言失败时调用,若设置了全局退出函数,则会调用该函数,否则会调用默认的退出函数。
#define LAMMP_THREAD_LOCAL
void *(* lmmp_heap_alloc_fn)(size_t size)
@ LAMMP_ERROR_MEMORY_ALLOC_FAILURE
@ LAMMP_ERROR_MEMORY_LEAK
#define lmmp_leak_tracker
void lmmp_set_heap_allocator(const lmmp_heap_allocator_t *heap)
设置 LAMMP 全局堆内存分配函数
_Thread_local lmmp_memory_ctx lmmp_tmpmem_ctx
void * lmmp_alloc(size_t size)
内存分配函数(调用lmmp_heap_alloc_fn)
int lmmp_stack_deinit(void)
LAMMP 全局栈释放函数(通常不需要手动调用)
int lmmp_stack_init(size_t size)
LAMMP 全局栈初始化函数(通常不需要手动调用)
void lmmp_free(void *ptr)
内存释放函数(调用lmmp_heap_free_fn)
void * lmmp_realloc(void *oldptr, size_t new_size)
内存重分配函数(调用lmmp_realloc_fn)
static _Thread_local int heap_alloc_count
void lmmp_global_init(void)
全局初始化函数(线程局部的)
void lmmp_global_deinit(void)
(线程局部的)全局共享的动态分配的堆内存资源释放函数
_Thread_local lmmp_heap_allocator_t global_heap
static void lmmp_chech_memory(size_t size, const char *func, int line)
int lmmp_alloc_count(int cnt)
堆内存分配计数器(线程局部)
#define LAMMP_DEFAULT_STACK_SIZE
Copyright (C) 2026 HJimmyK(Jericho Knox)
void lmmp_prime_int_table_free_(void)
释放全局素数表
static void * lmmp_realloc_debug(void *ptr, size_t new_size, const char *func, int line)
调试版 realloc
static void * lmmp_alloc_debug(size_t size, const char *func, int line)
调试版 malloc
static void lmmp_free_debug(void *ptr, const char *func, int line)
调试版 free
Copyright (C) 2026 HJimmyK(Jericho Knox)