美文网首页golang 编程笔记
【golang】unsafe笔记

【golang】unsafe笔记

作者: dongzd | 来源:发表于2020-03-21 15:36 被阅读0次

unsafe.Pointer

作用:用于各种指针相互转换的桥梁

  • 任何类型的指针和unsafe.Pointer可以相互转换
  • uintptr和unsafe.Pointer可以相互转换

uintptr

作用:存储指针的整型,底层类型是int

重点

uintptr与unsafe.Pointer可相互转换
区别:

  • unsafe.Pointer只是单纯的通用指针类型,用于不同指针转换,不可以参与指针运算
  • uintptr用于指针运算,GC不把uintptr当指针,无法持有对象,目标会被回收

用处

例:byte切片与string转换优化
通过unsafe包转换可以避免内存拷贝从而提高效率

func UnsafeBytesToString(bytes []byte) string {
    hdr := &reflect.StringHeader{
        Data: uintptr(unsafe.Pointer(&bytes[0])),
        Len:  len(bytes),
    }
    return *(*string)(unsafe.Pointer(hdr))
}

相关文章

  • 【golang】unsafe笔记

    unsafe.Pointer 作用:用于各种指针相互转换的桥梁 任何类型的指针和unsafe.Pointer可以相...

  • golang中unsafe包教程

    unsafe内容介绍 unsafe包只有两个类型,三个函数,但是功能很强大。 unsafe 库让 golang 可...

  • Go语言之unsafe包介绍及使用

    unsafe内容介绍 unsafe包只有两个类型,三个函数,但是功能很强大。 unsafe 库让 golang 可...

  • golang unsafe

    帅气的反射可以帮助我们做很多事情,但是它的性能常常成为瓶颈,在这种时候,我们就可以考虑使用 unsafe 来提升性...

  • MAY-Lesson 1

    笔记 - unsafe Package unsafe contains operations that step ...

  • golang中的unsafe包详解

    一、unsafe 作用 从golang的定义来看,unsafe 是类型安全的操作。顾名思义,它应该非常谨慎地使用;...

  • golang unsafe 包

    阅读原文 golang unsafe 包 ArbitraryType 和 Pointer Go 语言是强类型语言,...

  • Golang unsafe包使用

    unsafe包提供了访问底层内存的方法。是用unsafe函数可以提高访问对象的速度。通常用于对大数组的遍历。 un...

  • Golang指针与unsafe

    前言 我们知道在golang中是存在指针这个概念的。对于指针很多人有点忌惮(可能是因为之前学习过C语言),因为它会...

  • golang unsafe包介绍

    包内容 Pointer与uintptr uintptr是一个整数类型。 即使uintptr变量仍然有效,由uint...

网友评论

    本文标题:【golang】unsafe笔记

    本文链接:https://www.haomeiwen.com/subject/uenyyhtx.html