钢材销售网站建设,成都集和品牌设计公司,龙华网络推广公司,企业招聘网站大全免费/*** memca.c* 应用程序内存缓存简易实现* * 用于尝试解决在内存分配偶现耗时问题* * memca 不要求额外内存用于此处管理* 正因为如此#xff0c;所缓存内存单元最小为* 指针大小(sizeof(void *))*/
#include memca.h
#include stdlib.h#define MEMCA_MAX…/*** memca.c* 应用程序内存缓存简易实现* * 用于尝试解决在内存分配偶现耗时问题* * memca 不要求额外内存用于此处管理* 正因为如此所缓存内存单元最小为* 指针大小(sizeof(void *))*/
#include memca.h
#include stdlib.h#define MEMCA_MAX(a, b) ((a) (b) ? (a) : (b))
#define MEMCA_MUTEX(m) ({\(m) (pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER;\
})void memca_init (struct memca_s *ma)
{uint16_t size MEMCA_MAX(ma-size, sizeof(void *));uint32_t max ma-max;void *last NULL;ma-head ma-num 0;MEMCA_MUTEX(ma-lock);ma-size size;while (max--) {void *v malloc(size);if (!v)return ;if (!last) {ma-head last v;} else {*(void **) last v;last v;}*(void **)v NULL;ma-num 1;}return ;
}void memca_close(struct memca_s *ma)
{void *v;while ((vma-head)) {ma-head *(void **)v;ma-num - 1;free(v);}return ;
}void * memca_alloc(struct memca_s *ma)
{void *v;pthread_mutex_lock(ma-lock);if ((vma-head)) {ma-head *(void **)v;ma-num - 1;}pthread_mutex_unlock(ma-lock);return v ?: malloc(ma-size);
}void memca_free(struct memca_s *ma, void *v)
{pthread_mutex_lock(ma-lock);if (ma-num ma-max) {*(void **)v ma-head;ma-head v;ma-num 1;v NULL;}pthread_mutex_unlock(ma-lock);free(v);return ;
}#ifndef MEMCA_H
#define MEMCA_H#include inttypes.h
#include pthread.hstruct memca_s {const char *name;uint16_t size;pthread_mutex_t lock;uint32_t max;uint32_t num;void *head;
};void memca_init (struct memca_s *ma);
void memca_close(struct memca_s *ma);void * memca_alloc(struct memca_s *ma);
void memca_free (struct memca_s *ma, void *v);
#endif简单略有内涵。