a = [1,2,3]
ap = pointer(ap)
假设我只得到ap
,如何在不使用Vector{Int}
的情况下找回指针AP
指向的unsafe_load
?
答案 0 :(得分:1)
您不应在Julia中使用指针来引用对象。要引用对象,请使用Ref
,例如:reference = Ref(obj)
。要取消引用:obj = reference[]
。 Ref
是轻量级的,可以与垃圾回收器一起很好地使用,并且不会导致段错误。
指针在Julia中很有用,但通常只能进行奇怪的读/写操作。如果只有一个指针(由于某种原因),则可以使用Array
创建指向该内存的unsafe_wrap
。
答案 1 :(得分:0)
正确的用法是不要使用pointer
,因为它是为C设计的。您应该使用
pointer_from_objref
。例如
x = [1,2,3]
x === unsafe_pointer_to_objref(pointer_from_objref(x))
答案 2 :(得分:0)
您可以使用unsafe_warp
函数包装指向Julia数组的指针。参见here
顺便说一句,pointer
不再起作用,您可以改用Base.unsafe_convert
。这是同时使用两者的示例
a = [1,2,3]
ap = Base.unsafe_convert(Ptr{Clonglong}, a)
a2 = unsafe_wrap(Vector{Int64}, ap, 3, own=false)