我正在尝试取消引用指针unsafe_load
and unsafe_wrap
。我发现unsafe_load
不过效果很好unsafe_wrap
如果取消引用指向可变结构的指针,则会崩溃。玩具示例:
[mutable] struct Wrapper
data::Int
end
some = Wrapper(1)
ptr = convert(Ptr{Wrapper}, Base.Libc.malloc(sizeof(Wrapper)))
unsafe_store!(ptr, some)
unsafe_load(ptr) # returns Wrapper(1)
unsafe_wrap(Array, ptr, 1) # segfaults if Wrapper is mutable, works fine if not
而我正是需要unsafe_wrap
因为它不复制(我需要在分配的地方就地执行一些操作malloc
记忆)。为什么会出现段错误?
找到答案here https://discourse.julialang.org/t/advice-on-using-unsafe-wrap-to-view-integers-as-atomic-integers/67918/8
可变结构向量是指针向量,即
mutable struct Wrapper
data::Int
end
a = Wrapper(1)
b = [a, a]
a.data = 2
b # is now Wrapper[Wrapper(2), Wrapper(2)]
所以内存布局Int
and Wrapper
不一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)