美文网首页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笔记

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