golang 编程笔记

【golang】unsafe笔记

2020-03-21  本文已影响0人  dongzd

unsafe.Pointer

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

uintptr

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

重点

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

用处

例: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))
}
上一篇 下一篇

猜你喜欢

热点阅读