memkind使用介绍
Introduction:memkind是用户可扩展堆管理器,构建在jemalloc之上,它可以控制内存特性和各种内存之间的堆分区。
Problem:由于在各种系统、环境中都需要分配内存,并且没有统一的标准,所以memkind为了实现统一的函数分配而诞生:http://memkind.github.io/memkind/memkind_arch_20150318.pdf
memkind github:https://github.com/memkind/memkind
memkind 官网教程:http://memkind.github.io/memkind/
memkind API说明:http://memkind.github.io/memkind/man_pages/memkind.html
PS:memkind_create_pmem()采用tmpfile函数创建,在创建的目录中不会显示,并且当程序退出后创建的文件也会释放/删除。并且memkind_create_pmem()函数调用后,并不会立即创建文件,而是在memkind_pmem_mmap()函数调用后才会创建。
#include <memkind.h> # 头文件
Link with -lmemkind # 链接库
ERROR HANDLING: # 用于获取错误消息
void memkind_error_message(int err, char *msg, size_t size);
HEAP MANAGEMENT: # 创建和释放内存
void *memkind_malloc(memkind_t kind, size_t size);
void *memkind_calloc(memkind_t kind, size_t num, size_t size);
void *memkind_realloc(memkind_t kind, void *ptr, size_t size);
int memkind_posix_memalign(memkind_t kind, void **memptr, size_t alignment, size_t size);
void memkind_free(memkind_t kind, void *ptr);
KIND MANAGMENT: # 用于为memkind_malloc等函数创建memkind_t数据结构
int memkind_create_pmem(const char *dir, size_t max_size, memkind_t *kind);
int memkind_check_available(memkind_t kind);
DECORATORS: # 当memkind_malloc函数调用之前和调用之后,调用_pre和_post两函数
void memkind_malloc_pre(memkind_t *kind, size_t *size);
void memkind_malloc_post(memkind_t kind, size_t size, void **result);
void memkind_calloc_pre(memkind_t *kind, size_t *nmemb, size_t *size);
void memkind_calloc_post(memkind_t kind, size_t nmemb, size_t size, void **result);
void memkind_posix_memalign_pre(memkind_t *kind, void **memptr, size_t *alignment, size_t *size);
void memkind_posix_memalign_pos