我可以在 julia 中定义一个指针吗?

bit*_*ise 8 pointers language-design julia

如何在 Julia 中定义指向变量或列表元素的指针?我曾尝试阅读一些资源,但我对在 Julia 中使用指针感到非常困惑。

Ste*_*ski 14

你不能有一个指向变量的指针——不像 C/C++,Julia 不是这样工作的:变量没有内存位置。您可以使用该pointer_from_objref函数获得指向堆分配对象的指针。

pointer_from_objref(x)

获取 Julia 对象的内存地址作为Ptr. 结果的存在Ptr不会保护对象免于垃圾回收,因此您必须确保该对象在Ptr将被使用的整个时间内保持被引用。

不能在不可变对象上调用此函数,因为它们没有稳定的内存地址。

另见:unsafe_pointer_to_objref

为什么叫这个可怕的名字?因为,真的为什么要使用指向对象的指针?可能不要那样做。您还可以使用以下pointer函数获取指向数组的指针:

pointer(array [, index])

获取数组或字符串的本机地址,可选择在给定的位置index

此功能是“不安全的”。array只要将使用此指针,请小心确保存在对 Julia 的引用。该GC.@preserve 宏应该被用于保护array从垃圾收集参数给定的代码块中。

调用Ref(array[, index])通常比这个函数更可取,因为它保证了有效性。

这是一个更合理的用例,特别是对于与 C 或 Fortran 的互操作,但要小心。原始指针和垃圾收集之间的交互既棘手又危险。如果您不进行互操作,那么请认真考虑为什么需要指针——您可能希望以不同的方式处理问题。