From 5e9909a1e67013617037d387fe323ff84a251b7e Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Mon, 8 Nov 2021 17:13:22 +0800 Subject: [PATCH] more --- include/util/amalloc.h | 52 ---------------- include/util/mallocator.h | 57 +++++++++++++++++ source/dnode/vnode/impl/inc/vnodeInt.h | 1 - source/util/src/arenaAllocator.c | 14 +++++ source/util/src/heapAllocator.c | 86 ++++++++++++++++++++++++++ 5 files changed, 157 insertions(+), 53 deletions(-) delete mode 100644 include/util/amalloc.h create mode 100644 include/util/mallocator.h create mode 100644 source/util/src/arenaAllocator.c create mode 100644 source/util/src/heapAllocator.c diff --git a/include/util/amalloc.h b/include/util/amalloc.h deleted file mode 100644 index 938e1caa4c..0000000000 --- a/include/util/amalloc.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2019 TAOS Data, Inc. - * - * This program is free software: you can use, redistribute, and/or modify - * it under the terms of the GNU Affero General Public License, version 3 - * or later ("AGPL"), as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -#ifndef _TD_AMALLOC_H_ -#define _TD_AMALLOC_H_ - -#include "os.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define AMALLOC_APIS \ - void *(*malloc)(void *, size_t size); \ - void *(*calloc)(void *, size_t nmemb, size_t size); \ - void *(*realloc)(void *, size_t size); \ - void (*free)(void *ptr); - -// Interfaces to implement -typedef struct { - AMALLOC_APIS -} SMemAllocatorIf; - -typedef struct { - void *impl; - AMALLOC_APIS -} SMemAllocator; - -#define amalloc(allocator, size) ((allocator) ? (*((allocator)->malloc))((allocator)->impl, (size)) : malloc(size)) -#define acalloc(allocator, nmemb, size) \ - ((allocator) ? (*((allocator)->calloc))((allocator)->impl, (nmemb), (size)) : calloc((nmemb), (size))) -#define arealloc(allocator, ptr, size) \ - ((allocator) ? (*((allocator)->realloc))((allocator)->impl, (ptr), (size)) : realloc((ptr), (size))) -#define afree(allocator, ptr, size) ((allocator) ? (*((allocator)->free))((allocator)->impl, (ptr), (size)) : free(ptr)) - -#ifdef __cplusplus -} -#endif - -#endif /*_TD_AMALLOC_H_*/ \ No newline at end of file diff --git a/include/util/mallocator.h b/include/util/mallocator.h new file mode 100644 index 0000000000..87cccdbedf --- /dev/null +++ b/include/util/mallocator.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#ifndef _TD_MALLOCATOR_H_ +#define _TD_MALLOCATOR_H_ + +#include "os.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct SMemAllocator SMemAllocator; + +#define MALLOCATOR_APIS \ + void *(*malloc)(SMemAllocator *, size_t size); \ + void *(*calloc)(SMemAllocator *, size_t nmemb, size_t size); \ + void *(*realloc)(SMemAllocator *, size_t size); \ + void (*free)(SMemAllocator *, void *ptr); \ + size_t (*usage)(SMemAllocator *); + +// Interfaces to implement +typedef struct { + MALLOCATOR_APIS +} SMemAllocatorIf; + +struct SMemAllocator { + void * impl; + size_t usize; + MALLOCATOR_APIS +}; + +// heap allocator +SMemAllocator *tdCreateHeapAllocator(); +void tdDestroyHeapAllocator(SMemAllocator *pMemAllocator); + +// arena allocator +SMemAllocator *tdCreateArenaAllocator(size_t size); +void tdDestroyArenaAllocator(SMemAllocator *); + +#ifdef __cplusplus +} +#endif + +#endif /*_TD_MALLOCATOR_H_*/ \ No newline at end of file diff --git a/source/dnode/vnode/impl/inc/vnodeInt.h b/source/dnode/vnode/impl/inc/vnodeInt.h index 957690a451..48977ff046 100644 --- a/source/dnode/vnode/impl/inc/vnodeInt.h +++ b/source/dnode/vnode/impl/inc/vnodeInt.h @@ -18,7 +18,6 @@ #include "vnode.h" -#include "amalloc.h" #include "meta.h" #include "sync.h" #include "tlog.h" diff --git a/source/util/src/arenaAllocator.c b/source/util/src/arenaAllocator.c new file mode 100644 index 0000000000..6dea4a4e57 --- /dev/null +++ b/source/util/src/arenaAllocator.c @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ \ No newline at end of file diff --git a/source/util/src/heapAllocator.c b/source/util/src/heapAllocator.c new file mode 100644 index 0000000000..3b0d975e7e --- /dev/null +++ b/source/util/src/heapAllocator.c @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#include "mallocator.h" + +typedef struct { + char name[64]; +} SHeapAllocator; + +static SHeapAllocator *haNew(); +static void haDestroy(SHeapAllocator *pha); +static void * haMalloc(SMemAllocator *pMemAllocator, size_t size); +void * haCalloc(SMemAllocator *pMemAllocator, size_t nmemb, size_t size); +static void haFree(SMemAllocator *pMemAllocator, void *ptr); + +SMemAllocator *tdCreateHeapAllocator() { + SMemAllocator *pMemAllocator = NULL; + + pMemAllocator = (SMemAllocator *)calloc(1, sizeof(*pMemAllocator)); + if (pMemAllocator == NULL) { + // TODO: handle error + return NULL; + } + + pMemAllocator->impl = haNew(); + if (pMemAllocator->impl == NULL) { + tdDestroyHeapAllocator(pMemAllocator); + return NULL; + } + + pMemAllocator->usage = 0; + pMemAllocator->malloc = haMalloc; + pMemAllocator->calloc = haCalloc; + pMemAllocator->realloc = NULL; + pMemAllocator->free = haFree; + pMemAllocator->usage = NULL; + + return pMemAllocator; +} + +void tdDestroyHeapAllocator(SMemAllocator *pMemAllocator) { + if (pMemAllocator) { + // TODO + } +} + +/* ------------------------ STATIC METHODS ------------------------ */ +static SHeapAllocator *haNew() { + SHeapAllocator *pha = NULL; + /* TODO */ + return pha; +} + +static void haDestroy(SHeapAllocator *pha) { + // TODO +} + +static void *haMalloc(SMemAllocator *pMemAllocator, size_t size) { + void *ptr = NULL; + + ptr = malloc(size); + if (ptr) { + } + + return ptr; +} + +void *haCalloc(SMemAllocator *pMemAllocator, size_t nmemb, size_t size) { + /* TODO */ + return NULL; +} + +static void haFree(SMemAllocator *pMemAllocator, void *ptr) { /* TODO */ +} \ No newline at end of file -- GitLab