标题可能不是很清楚,所以最好解释一下我想要做什么。
我有一个 (C) 共享库,供我的几个应用程序使用。我现在想在 PostgreSQL 中使用我的共享库中的函数,所以我正在为 PostgreSQL (v8.4) 编写一个扩展库。
为了防止代码重复(遵循 DRY 理念),我希望扩展库只是围绕我上面描述的核心共享库的一个精简 API。问题就在于此。
在我的核心库中,我多次调用内存管理函数(主要是 calloc 和 realloc)。另一方面,PostgreSQL 有自己的内存管理函数,如 palloc、pfree 等。
理想情况下,我希望 PG 扩展库调用核心库。当执行 PG 调用时,我希望核心库使用 postgresql mem 函数,而当我的其他应用程序调用函数时,我希望核心库使用标准 C mem 函数。
我不知道这是否可能(它肯定可以让我不必为核心库复制整个现有代码)。我认为在核心库的头文件中添加一些定义,如下所示:
#ifdef BUILDING_PG_XTLIB
#define calloc palloc0
#define realloc prealloc
#define free pfree
#endif
然后重新编译核心库。然而,经过后来的反思,我意识到这解决了编译时的问题,而不是运行时(除非我弄错了)——所以我已经没有关于如何解决这个问题的想法了。
这个可以吗。。如果是这样,怎么做?