0

タイトルはあまり明確ではないかもしれないので、私がやろうとしていることを説明するのがおそらく最善でしょう。

いくつかのアプリケーションで使用されている(C)共有ライブラリがあります。PostgreSQLの共有ライブラリの関数を使用したいので、PostgreSQL(v8.4)の拡張ライブラリを作成しています。

コードの重複を防ぐために(DRY哲学に従って)、拡張ライブラリを、上記で説明したコア共有ライブラリの周りの単純なシンAPIにします。そこに問題があります。

私のコアライブラリでは、メモリ管理機能(主にcallocとrealloc)に対して多くの呼び出しを行います。一方、PostgreSQLには、palloc、pfreeなどの独自のメモリ管理機能があります。

理想的には、PG拡張ライブラリがコアライブラリを呼び出すようにします。PG呼び出しを実行しているときは、コアライブラリでpostgresql mem関数を使用し、他のアプリケーションで関数を呼び出しているときは、コアライブラリで標準のCmem関数を使用します。

これが可能かどうかはわかりません(コアライブラリの既存のコード全体を複製する必要がなくなります)。コアライブラリのヘッダーファイルに次のようにいくつかの定義を追加すると思います。

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

次に、コアライブラリを再コンパイルします。しかし、後で振り返ってみると、これは実行時ではなくコンパイル時に問題を解決することに気付きました(私が間違っていない限り)-したがって、この問題に取り組む方法についてのアイデアが不足しています。

これはできますか?もしそうなら、どのように?

4

0 に答える 0