首页 > 解决方案 > 如何将 Julia 数组推送到 C 中的垃圾收集器?

问题描述

https://docs.julialang.org/en/stable/manual/embedding/上,它说明了如何在 C 中使用 Julia 数组和垃圾收集器,但没有说明如何一起使用它们。

比方说,我按照示例中的说明按照以下方式分配了一个数组:

jl_value_t* array_type = jl_apply_array_type((jl_value_t*)jl_float64_type, 1);
jl_array_t* x          = jl_alloc_array_1d(array_type, 10);
double *xData          = (double*)jl_array_data(x);

如果我在下一次调用函数时不使用该数组jl_,它将被垃圾收集,正如它给我一个垃圾值所证明的那样。如果我 (a) 使用jl_gc_enable(0)或 (b) 在下一次调用中使用 Julia 中的数组,我没有任何问题。

我可以将数组推送到垃圾收集器,但下面的示例代码对我没有帮助:

jl_value_t **args;
JL_GC_PUSHARGS(args, 2); // args can now hold 2 `jl_value_t*` objects
args[0] = some_value;
args[1] = some_other_value;
// Do something with args (e.g. call jl_... functions)
JL_GC_POP();

这段代码需要一个jl_value_t**,但我没有这样的数组。我只有array_type,xxData, 它们都是不同类型的三个。

那么我将如何推动数组以便它不会被垃圾收集呢?

标签: cmemory-managementgarbage-collectionjulia

解决方案


推荐阅读