自学内容网 自学内容网

C/C++ 跨平台引入 jemalloc 内存池分配管理的编译兼容性

在 Windows 平台上面,引入由VCPKG部署编译的 JEMALLOC 是无法调用 JE_MALLOC、JE_FREE 函数的,除非对库头文件进行魔改,一个好的办法是显示声明并导入函数签名。

在其它平台上面必须定义:JEMALLOC_NO_DEMANGLE 编译器预处理宏,否则是无法调用 JE_MALLOC、JE_FREE 等函数的。

#if defined(JEMALLOC)
#if defined(_WIN32)
#if defined(__cplusplus)
extern "C" {
#endif
    void*                                                                   je_malloc(size_t size);
    void                                                                    je_free(void* size);
    int                                                                     je_mallctl(const char *name, void *oldp, size_t *oldlenp, void *newp, size_t newlen);
#if defined(__cplusplus)
}
#endif

// Under the Windows platform, the default project compiled by microsoft vcpkg jemalloc for windowos does not have the C/C++ compiler macro version information, 
// And the compiler user needs to manually define it in this header file so that it can be included in the help information. 
// Displays the library version information that is directly dependent.
// 
// Jemalloc compiled by vcpkg on windows, version macro information summary: Windows 0.0.0-0-g000000missing_version_try_git_fetch_tags
#if !defined(JEMALLOC_VERSION_MAJOR) && !defined(JEMALLOC_VERSION_MINOR) && !defined(JEMALLOC_VERSION_BUGFIX) && !defined(JEMALLOC_VERSION_NREV)
#define JEMALLOC_VERSION_MAJOR  5
#define JEMALLOC_VERSION_MINOR  3
#define JEMALLOC_VERSION_BUGFIX 0
#define JEMALLOC_VERSION_NREV   0
#endif
#else
#define JEMALLOC_NO_DEMANGLE
#include <jemalloc/jemalloc.h>
#endif
#endif


原文地址:https://blog.csdn.net/liulilittle/article/details/143497122

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!