gpt4 book ai didi

c - 什么时候需要 CAMLparamX?

转载 作者:太空狗 更新时间:2023-10-29 15:35:48 25 4
gpt4 key购买 nike

我正在使用 OCaml 中的外部声明编写 C 库的接口(interface)。我使用 ctypes 进行测试,但它涉及 100% 的快速调用开销(通过 core_bench 微基准测试测量)。

函数如下所示:

/* external _create_var : float -> int -> int -> int -> _npnum = "ocaml_tnp_number_create_var" ;; */
value ocaml_tnp_number_create_var(value v, value nr, value p, value o) {
//CAMLparam4(v, nr, p, o);
const int params = Int_val(p);
const int order = Int_val(o);
const int number = Int_val(nr);
const double value = Double_val(v);
return CTYPES_FROM_PTR(tnp_number_create_variable(value, number, params, order));
}
/* external _delete : _npnum -> unit = "ocaml_tnp_number_delete" ;; */
value ocaml_tnp_number_delete(value num) {
//CAMLparam1(num);
struct tnp_number* n = CTYPES_TO_PTR(num);
tnp_number_delete(n);
return Val_unit;
}

我借用了 CTYPES_* 宏,所以我基本上是将指针作为 Int64 值移动。

#define CTYPES_FROM_PTR(P) caml_copy_int64((intptr_t)P)
#define CTYPES_TO_PTR(I64) ((void *)Int64_val(I64))
#define CTYPES_PTR_PLUS(I64, I) caml_copy_int64(Int64_val(I64) + I)

据我所知,这些值表示为标记为“自定义”的框,GC 应保持不变。

我是否需要取消对 CAMLparamX 宏的注释以通知 GC 我的使用情况或者忽略它们是否合法?

最佳答案

根据byterun/memory.h中的评论您的函数必须以包含所有value 参数的CAMLparamN 宏开头。

关于c - 什么时候需要 CAMLparamX?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21930764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com