C 跨平台库中内存管理功能的使用
我正在使用C创建一个跨平台库。我有一段代码,如下所示,其中我直接使用libc内存管理函数:C 跨平台库中内存管理功能的使用,c,memory-management,cross-platform,C,Memory Management,Cross Platform,我正在使用C创建一个跨平台库。我有一段代码,如下所示,其中我直接使用libc内存管理函数: myObject* myObjectCreate(void) { ... myObject *pObject = (myObject*)malloc(sizeof(*pObject)); ... } void myObjectDestroy(myObject *pObject) { ... free(pObject); ... } 我知道这些内存管理功能
myObject* myObjectCreate(void)
{
...
myObject *pObject = (myObject*)malloc(sizeof(*pObject));
...
}
void myObjectDestroy(myObject *pObject)
{
...
free(pObject);
...
}
我知道这些内存管理功能并不总是可用的,尤其是在基于低端微控制器的嵌入式系统上。不幸的是,我的库需要在这些系统上进行编译
为了解决这个问题,我想我必须让我的库客户端自定义这些函数
那么,实现这一目标的推荐方法是什么呢?有很多方法 我使用#if,结合编译器提供的定义,来实现每个平台的行为 如果找到给定的功能(如malloc),可以定义#define MYLIB_malloc
然后,稍后,您可以检查#ifdef MYLIB_MALLOC,如果不存在,则提供一个伪MALLOC函数,该函数将允许您的代码进行编译。使用条件编译,即定义一些宏,如
LIBC_AVAIL
,LIBC_not_AVAIL
,并在编译时包含不同的代码。使用函数指针
在库中定义以下指针:
void* (*CustomMalloc)(size_t) = NULL;
void (*CustomFree)(void*) = NULL;
在使用库函数之前,初始化这些指针以指向malloc()
和free()
的自定义实现。或者将它们初始化为指向真实的malloc()
和free()
在库内部,仍然将
malloc(size)
替换为CustomMalloc(size)
和free(pointer)
替换为CustomFree(pointer)
——需要有一种机制让代码知道是指向malloc()还是伪malloc()。函数指针的使用并不能解决这个问题。@BlankXavier我不确定我在这里看到了一个问题。你能详细说明一下吗?