文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
总结
1.2 中的 Pointer
和 uintptr
的区别:
假设在内存中有一个变量 a := 1
那么 p := Pointer(&a)
中,p 包含的就是 a 的实际地址,假设为 1000
,当 a 在内存中移动时,p 中的地址值也会实时更新。
而 uintprt(p)
只是 1000
,就是 a 的地址值,但是当 a 在内存中移动时,原来获取的 uintptr
值并不会发生变化,一直都是 1000。
也是因为这个原因, syscall.Syscall
传入的 uintptr
如果代表一个对象的指针,那么该对象在内存中是一直被保留的,而且不能移动,否则的话 uintptr
指向的就不是原来的对象了,容易内存泄漏。
还有一个就是 uintptr
不能保存在变量中,只能使用 Pointer
进行转换然后才能保存。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论