登录
首页 >  Golang >  Go问答

golang中的unsafe.Pointer()是否进行引用计数?

来源:stackoverflow

时间:2024-02-14 16:03:25 253浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《golang中的unsafe.Pointer()是否进行引用计数?》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

是否对 unsafe.Pointer() 进行引用计数,从而防止被垃圾收集?

例如,如果我有一个字符串,则它在作用域内时存在,如果我有一个 *string,则当指针在作用域内时该字符串存在,但如果我有一个 unsafe.Pointer(&s) (其中 s是一个字符串或其他什么)只要不安全的指针仍然指向它,s就会留在范围内吗?

我发现谷歌说,一旦你转换为 uintptr ,它绝对不是,因为 uintptr 只是一个 int,但我找不到任何关于 unsafe.Pointer() 的明确信息,可能是因为答案很明显,但我不太确定,因为我找不到任何可以准确解释它的内容。

如果我将 unsafe.Pointer 转换为其他指针类型,我认为这不会改变什么?


正确答案


unsafe.Pointer 防止被指向对象被收集。

此外,Golang 使用跟踪垃圾收集器,而不是引用计数。

这没有明确拼写,但可以从 https://pkg.go.dev/unsafe#Pointer 推断

该文档介绍了一些被认为是安全的 unsafe.Pointer 使用模式。特别是,从 T1* 到指针到 T2* 的转换是有效的,前提是 T2 不大于 T1 并且类型具有“等效内存布局”。

因此,从 T* 到 unsafe.Pointer 以及返回到 T* 的转换是安全的,没有任何限制。如果 unsafe.Pointer 没有阻止引用的对象被收集,那就不安全了。

今天关于《golang中的unsafe.Pointer()是否进行引用计数?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>