标题可能不是很清楚,所以最好解释一下我要做的事情。
我有一个(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
然后重新编译核心库。但是经过后来的反思,我意识到这可以在编译时解决问题,而不是运行时间(除非我弄错了) - 所以我已经没有关于如何解决这个问题的想法了。
可以这样做吗?如果是这样,怎么样?