外部関数が次のように宣言されている場合
int open_db(char *path, Db **db)
内部で Db のインスタンスを作成し、ポインターを に割り当てます*db
。これを Chez スキームから処理する最も効率的な方法は何ですか?
私が思いついた唯一のことは、foreign-alloc を使用して C ポインターにメモリを割り当て、それにアドレスを渡し、アドレスをコピーしてからすぐにこのメモリを解放することでした。
(define open_db (foreign-procedure "open_db" (string void*) int))
(define-record-type db (fields (mutable ptr)))
(define (open-db path)
(let ((pptr (foreign-alloc (foreign-sizeof 'void*))))
(open_db path pptr)
(let ((ptr (foreign-ref 'void* pptr 0)))
(foreign-free pptr)
(make-db ptr))))
このポインタへのメモリの一時的な割り当てを回避する方法はありますか?