为了账号安全,请及时绑定邮箱和手机立即绑定

在 golang 中,是否计算 unsafe.Pointer() 的引用?

在 golang 中,是否计算 unsafe.Pointer() 的引用?

Go
大话西游666 2022-10-24 09:24:52
unsafe.Pointer() 的引用是否被计数并因此被保护免于被垃圾收集?如,如果我有一个字符串,它在范围内时存在,如果我有一个 *string,则在指针在范围内时字符串存在,但如果我有一个 unsafe.Pointer(&s) (其中 s 是一个字符串或其他)只要不安全的指针仍然指向它,它就会留在范围内吗?我发现谷歌说一旦你转换为 uintptr 肯定不是,因为 uintptr 只是一个 int,但我找不到任何关于 unsafe.Pointer() 的明确方法,可能是因为答案很明显,但我'我不是很确定,因为我找不到任何可以准确解释它的东西。如果我将 unsafe.Pointer 转换为其他指针类型,我认为这不会改变事情吗?
查看完整描述

1 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

unsafe.Pointer 防止指针被收集。

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

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

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

因此,从 T* 到 unsafe.Pointer 并返回到 T* 的转换是安全的,没有任何约束。如果 unsafe.Pointer 没有阻止引用的对象被收集,那将是不安全的。


查看完整回答
反对 回复 2022-10-24
  • 1 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号