是否可以拥有一个具有多个内存管理功能的C(共享)库?

时间:2012-01-05 09:32:05

标签: c memory-management malloc calloc

标题可能不是很清楚,所以最好解释一下我要做的事情。

我有一个(C)共享库,我的几个应用程序使用它。我现在想在PostgreSQL中使用我的共享库中的函数,所以我正在为PostgreSQL(v8.4)编写扩展库。

为了防止代码重复(遵循DRY原则),我希望扩展库只是围绕我上面描述的核心共享库的瘦API。这就是问题所在。

在我的核心库中,我对内存mgmt funcs(主要是calloc和realloc)进行了多次调用。另一方面,PostgreSQL有自己的内存管理功能,如palloc,pfree等。

理想情况下,我希望PG扩展lib调用核心库。当PG调用正在执行时,我希望核心库使用postgresql mem函数,当我的其他应用程序调用函数时,我希望核心库使用标准的C ++函数。

我不知道这是否可行(这肯定会让我不得不复制核心库的整个现有代码)。我想在核心库的头文件中添加一些定义如下:

#ifdef BUILDING_PG_XTLIB
 #define calloc   palloc0
 #define realloc  prealloc
 #define free     pfree
#endif

然后重新编译核心库。但是经过后来的反思,我意识到这可以在编译时解决问题,而不是运行时间(除非我弄错了) - 所以我已经没有关于如何解决这个问题的想法了。

可以这样做吗?如果是这样,怎么样?

0 个答案:

没有答案