export struct fast_allocator_wrapper

rw_perf_optimization
YuQing 2022-08-28 17:20:20 +08:00
parent 82bbc013b2
commit b0d57b325d
3 changed files with 18 additions and 18 deletions

View File

@ -25,12 +25,6 @@
#define BYTES_ALIGN(x, pad_mask) (((x) + pad_mask) & (~pad_mask)) #define BYTES_ALIGN(x, pad_mask) (((x) + pad_mask) & (~pad_mask))
struct allocator_wrapper {
int alloc_bytes;
short allocator_index;
short magic_number;
};
static struct fast_allocator_info malloc_allocator; static struct fast_allocator_info malloc_allocator;
#define ADD_ALLOCATOR_TO_ARRAY(acontext, allocator, _pooled) \ #define ADD_ALLOCATOR_TO_ARRAY(acontext, allocator, _pooled) \
@ -269,7 +263,7 @@ int fast_allocator_init_ex(struct fast_allocator_context *acontext,
acontext->allocator_array.malloc_bytes_limit = alloc_bytes_limit / acontext->allocator_array.malloc_bytes_limit = alloc_bytes_limit /
acontext->allocator_array.expect_usage_ratio; acontext->allocator_array.expect_usage_ratio;
acontext->allocator_array.reclaim_interval = reclaim_interval; acontext->allocator_array.reclaim_interval = reclaim_interval;
acontext->extra_size = sizeof(struct allocator_wrapper) + obj_size; acontext->extra_size = sizeof(struct fast_allocator_wrapper) + obj_size;
acontext->need_lock = need_lock; acontext->need_lock = need_lock;
result = 0; result = 0;
previous_end = 0; previous_end = 0;
@ -349,8 +343,8 @@ int fast_allocator_init_ex(struct fast_allocator_context *acontext,
ADD_ALLOCATOR_TO_ARRAY(acontext, &malloc_allocator, false); ADD_ALLOCATOR_TO_ARRAY(acontext, &malloc_allocator, false);
/* /*
logInfo("sizeof(struct allocator_wrapper): %d, allocator_array count: %d", logInfo("sizeof(struct fast_allocator_wrapper): %d, allocator_array count: %d",
(int)sizeof(struct allocator_wrapper), acontext->allocator_array.count); (int)sizeof(struct fast_allocator_wrapper), acontext->allocator_array.count);
*/ */
return result; return result;
} }
@ -505,7 +499,7 @@ void *fast_allocator_alloc(struct fast_allocator_context *acontext,
return NULL; return NULL;
} }
} }
obj = (char *)ptr + sizeof(struct allocator_wrapper); obj = (char *)ptr + sizeof(struct fast_allocator_wrapper);
} }
else else
{ {
@ -520,7 +514,7 @@ void *fast_allocator_alloc(struct fast_allocator_context *acontext,
} }
fast_allocator_malloc_trunk_notify_func(alloc_bytes, acontext); fast_allocator_malloc_trunk_notify_func(alloc_bytes, acontext);
obj = (char *)ptr + sizeof(struct allocator_wrapper); obj = (char *)ptr + sizeof(struct fast_allocator_wrapper);
if (acontext->allocator_array.allocators[0]->mblock. if (acontext->allocator_array.allocators[0]->mblock.
object_callbacks.init_func != NULL) object_callbacks.init_func != NULL)
{ {
@ -531,18 +525,18 @@ void *fast_allocator_alloc(struct fast_allocator_context *acontext,
} }
} }
((struct allocator_wrapper *)ptr)->allocator_index = ((struct fast_allocator_wrapper *)ptr)->allocator_index =
allocator_info->index; allocator_info->index;
((struct allocator_wrapper *)ptr)->magic_number = ((struct fast_allocator_wrapper *)ptr)->magic_number =
allocator_info->magic_number; allocator_info->magic_number;
((struct allocator_wrapper *)ptr)->alloc_bytes = alloc_bytes; ((struct fast_allocator_wrapper *)ptr)->alloc_bytes = alloc_bytes;
__sync_add_and_fetch(&acontext->alloc_bytes, alloc_bytes); __sync_add_and_fetch(&acontext->alloc_bytes, alloc_bytes);
return obj; return obj;
} }
void fast_allocator_free(struct fast_allocator_context *acontext, void *obj) void fast_allocator_free(struct fast_allocator_context *acontext, void *obj)
{ {
struct allocator_wrapper *pWrapper; struct fast_allocator_wrapper *pWrapper;
struct fast_allocator_info *allocator_info; struct fast_allocator_info *allocator_info;
void *ptr; void *ptr;
@ -551,8 +545,8 @@ void fast_allocator_free(struct fast_allocator_context *acontext, void *obj)
return; return;
} }
ptr = (char *)obj - sizeof(struct allocator_wrapper); ptr = (char *)obj - sizeof(struct fast_allocator_wrapper);
pWrapper = (struct allocator_wrapper *)ptr; pWrapper = (struct fast_allocator_wrapper *)ptr;
if (pWrapper->allocator_index < 0 || pWrapper->allocator_index >= if (pWrapper->allocator_index < 0 || pWrapper->allocator_index >=
acontext->allocator_array.count) acontext->allocator_array.count)
{ {

View File

@ -56,6 +56,12 @@ struct fast_allocator_array
struct fast_allocator_info **allocators; struct fast_allocator_info **allocators;
}; };
struct fast_allocator_wrapper {
int alloc_bytes;
short allocator_index;
short magic_number;
};
struct fast_allocator_context struct fast_allocator_context
{ {
struct fast_region_info *regions; struct fast_region_info *regions;

View File

@ -86,7 +86,7 @@ struct fast_task_info
}; };
void *arg; //extra argument pointer void *arg; //extra argument pointer
char *data; //buffer for write or read char *data; //buffer for write or read
char *recv_body; char *recv_body; //for extra (dynamic) recv buffer
struct { struct {
struct iovec *iovs; struct iovec *iovs;