首页 > 解决方案 > 我可以在 Julia 中定义一个指针吗?

问题描述

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

标签: pointersjulialanguage-design

解决方案


你不能有一个指向变量的指针——与 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 的互操作,但要小心。原始指针和垃圾回收之间的交互既棘手又危险。如果您不进行互操作,那么请认真考虑为什么需要指针——您可能希望以不同的方式解决问题。


推荐阅读