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