/* * 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. */ #ifndef _BH_MEMORY_H #define _BH_MEMORY_H #ifdef __cplusplus extern "C" { #endif #define BH_KB (1024) #define BH_MB ((BH_KB)*1024) #define BH_GB ((BH_MB)*1024) /** * Initialize memory allocator with a pool, the bh_malloc/bh_free function * will malloc/free memory from the pool * * @param mem the pool buffer * @param bytes the size bytes of the buffer * * @return 0 if success, -1 otherwise */ int bh_memory_init_with_pool(void *mem, unsigned int bytes); /** * Initialize memory allocator with memory allocator, the bh_malloc/bh_free * function will malloc/free memory with the allocator passed * * @param malloc_func the malloc function * @param free_func the free function * * @return 0 if success, -1 otherwise */ int bh_memory_init_with_allocator(void *malloc_func, void *free_func); /** * Destroy memory */ void bh_memory_destroy(); #if BEIHAI_ENABLE_MEMORY_PROFILING == 0 /** * This function allocates a memory chunk from system * * @param size bytes need allocate * * @return the pointer to memory allocated */ void* bh_malloc(unsigned int size); /** * This function frees memory chunk * * @param ptr the pointer to memory need free */ void bh_free(void *ptr); #else void* bh_malloc_profile(const char *file, int line, const char *func, unsigned int size); void bh_free_profile(const char *file, int line, const char *func, void *ptr); #define bh_malloc(size) bh_malloc_profile(__FILE__, __LINE__, __func__, size) #define bh_free(ptr) bh_free_profile(__FILE__, __LINE__, __func__, ptr) /** * Print current memory profiling data * * @param file file name of the caller * @param line line of the file of the caller * @param func function name of the caller */ void memory_profile_print(const char *file, int line, const char *func, int alloc); /** * Summarize memory usage and print it out * Can use awk to analyze the output like below: * awk -F: '{print $2,$4,$6,$8,$9}' OFS="\t" ./out.txt | sort -n -r -k 1 */ void memory_usage_summarize(); #endif #ifdef __cplusplus } #endif #endif /* #ifndef _BH_MEMORY_H */