| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- /*
- * Copyright (C) 2019 Intel Corporation. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #include "bh_memory.h"
- #include "mem_alloc.h"
- #include <stdio.h>
- #include <stdlib.h>
- #ifndef MALLOC_MEMORY_FROM_SYSTEM
- typedef enum Memory_Mode {
- MEMORY_MODE_UNKNOWN = 0, MEMORY_MODE_POOL, MEMORY_MODE_ALLOCATOR
- } Memory_Mode;
- static Memory_Mode memory_mode = MEMORY_MODE_UNKNOWN;
- static mem_allocator_t pool_allocator = NULL;
- static void *(*malloc_func)(unsigned int size) = NULL;
- static void (*free_func)(void *ptr) = NULL;
- int bh_memory_init_with_pool(void *mem, unsigned int bytes)
- {
- mem_allocator_t _allocator = mem_allocator_create(mem, bytes);
- if (_allocator) {
- memory_mode = MEMORY_MODE_POOL;
- pool_allocator = _allocator;
- return 0;
- }
- printf("Init memory with pool (%p, %u) failed.\n", mem, bytes);
- return -1;
- }
- int bh_memory_init_with_allocator(void *_malloc_func, void *_free_func)
- {
- if (_malloc_func && _free_func && _malloc_func != _free_func) {
- memory_mode = MEMORY_MODE_ALLOCATOR;
- malloc_func = _malloc_func;
- free_func = _free_func;
- return 0;
- }
- printf("Init memory with allocator (%p, %p) failed.\n", _malloc_func,
- _free_func);
- return -1;
- }
- void bh_memory_destroy()
- {
- if (memory_mode == MEMORY_MODE_POOL)
- mem_allocator_destroy(pool_allocator);
- memory_mode = MEMORY_MODE_UNKNOWN;
- }
- void* bh_malloc(unsigned int size)
- {
- if (memory_mode == MEMORY_MODE_UNKNOWN) {
- printf("bh_malloc failed: memory hasn't been initialize.\n");
- return NULL;
- } else if (memory_mode == MEMORY_MODE_POOL) {
- return mem_allocator_malloc(pool_allocator, size);
- } else {
- return malloc_func(size);
- }
- }
- void bh_free(void *ptr)
- {
- if (memory_mode == MEMORY_MODE_UNKNOWN) {
- printf("bh_free failed: memory hasn't been initialize.\n");
- } else if (memory_mode == MEMORY_MODE_POOL) {
- mem_allocator_free(pool_allocator, ptr);
- } else {
- free_func(ptr);
- }
- }
- #else /* else of MALLOC_MEMORY_FROM_SYSTEM */
- void* bh_malloc(unsigned int size)
- {
- return malloc(size);
- }
- void bh_free(void *ptr)
- {
- if (ptr)
- free(ptr);
- }
- #endif /* end of MALLOC_MEMORY_FROM_SYSTEM*/
|