Golang交给用户三种指针
- “*”
- unsafe.pointer
- unitptr
其中 unsafe.pointer可以将内存结构相同的两个变量,类型相互转换,而uintptr可以直接操作内存,这里讲的是高效将字符串和byte数组相互转换
![在这里插入图片描述](https://img-blog.csdnimg.cn/b0e09055988e42b7a8256a6a65967f7c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m95riQ6Iul56a7,size_18,color_FFFFFF,t_70,g_se,x_16)
压测
这里我们可以发现,
A进行了一次内存分配 1s只执行了1332次
而B没有进行内存再分别 且1s执行了100000000次,速度天差地别
但是这种高效是有限制条件的。
我测试发现,如果byte数组生成和转换在同一个函数里,甚至string强转是快于unsafe.pointer的,所以高效的前提条件是作为函数参数传进来,这里的参数不限于值和指针。