16#ifndef __LAMMP_TMP_ALLOC_H__
17#define __LAMMP_TMP_ALLOC_H__
49#define HSIZE sizeof(void*)
53#if LAMMP_DEBUG_MEMORY_CHECK == 1
56 snprintf(
msg,
sizeof(
msg),
"Memory allocation failure (trying to allocate: %zu bytes)", size);
60 *(
void**)p =
pmarker->heap_marker;
87#if LAMMP_DEBUG_STACK_OVERFLOW_CHECK == 1
90 snprintf(
msg,
sizeof(
msg),
"Stack overflow (trying to allocate: %zu bytes, stack remaining: %zu bytes)",
offset,
131#define TEMP_DECL lmmp_alloc_marker __lmmp_marker_ = {NULL, NULL, NULL}
132#define TEMP_B_DECL TEMP_DECL
133#define TEMP_S_DECL TEMP_DECL
135#define TEMP_SALLOC_THRESHOLD 0x7f00
138#define TEMP_SALLOC(n) lmmp_temp_stack_alloc_(&__lmmp_marker_, (n))
140#define TEMP_BALLOC(n) lmmp_temp_pool_alloc_(&__lmmp_marker_, (n))
142#define TEMP_TALLOC(n) ((n) <= TEMP_SALLOC_THRESHOLD ? TEMP_SALLOC(n) : TEMP_BALLOC(n))
144#define SALLOC_TYPE(n, type) ((type*)TEMP_SALLOC((n) * sizeof(type)))
146#define BALLOC_TYPE(n, type) ((type*)TEMP_BALLOC((n) * sizeof(type)))
148#define TALLOC_TYPE(n, type) ((type*)TEMP_TALLOC((n) * sizeof(type)))
152 if (__lmmp_marker_.heap_marker != NULL) \
153 lmmp_temp_heap_free_(&__lmmp_marker_); \
154 if (__lmmp_marker_.stack_marker != NULL) \
155 lmmp_temp_stack_free_(&__lmmp_marker_); \
156 if (__lmmp_marker_.pool_marker != NULL) \
157 lmmp_temp_pool_free_(&__lmmp_marker_); \
161 if (__lmmp_marker_.pool_marker != NULL) \
162 lmmp_temp_pool_free_(&__lmmp_marker_); \
163 if (__lmmp_marker_.heap_marker != NULL) \
164 lmmp_temp_heap_free_(&__lmmp_marker_); \
168 if (__lmmp_marker_.stack_marker != NULL) \
169 lmmp_temp_stack_free_(&__lmmp_marker_); \
173#define ALLOC_TYPE(n, type) ((type*)lmmp_alloc((size_t)(n) * sizeof(type)))
175#define REALLOC_TYPE(p, new_size, type) ((type*)lmmp_realloc((p), (new_size) * sizeof(type)))
void lmmp_abort(lmmp_error_t type, const char *msg, const char *func, int line)
LAMMP 全局退出函数,内部错误或断言失败时调用,若设置了全局退出函数,则会调用该函数,否则会调用默认的退出函数。
#define LAMMP_THREAD_LOCAL
@ LAMMP_ERROR_MEMORY_ALLOC_FAILURE
#define LMMP_ROUND_UP_MULTIPLE(a, m)
static void * lmmp_temp_heap_alloc_(lmmp_alloc_marker *pmarker, size_t size)
static void * lmmp_temp_stack_alloc_(lmmp_alloc_marker *pmarker, size_t size)
static void lmmp_temp_stack_free_(lmmp_alloc_marker *pmarker)
_Thread_local lmmp_memory_ctx lmmp_tmpmem_ctx
static void lmmp_temp_heap_free_(lmmp_alloc_marker *pmarker)
static void * lmmp_temp_pool_alloc_(lmmp_alloc_marker *pmarker, size_t size)
static void lmmp_temp_pool_free_(lmmp_alloc_marker *pmarker)
_Thread_local lmmp_heap_allocator_t global_heap
Copyright (C) 2026 HJimmyK(Jericho Knox)