关于copy函数,目标和源处于相同地址时,会继续执行拷贝吗?

linhaibin676hotmail · · 1168 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

func copy(dst, src []Type) int 如果dst == src,我记得C++中memcpy如果二者相同则不执行拷贝,因为拷不拷贝结果都一样。 golang会这样吗?我用下列代码试了一下,结果不管dst和src是否相同,执行效率都一样,t3-t2和t2-t1基本接近。是不是能说明不管怎样,copy都执行了拷贝?哪位大神能提供一下源码? func TestSomething() { a_size := uint32(1024 * 1024) copy_size := uint32(1024 * 1024) r := rand.New(rand.NewSource(time.Now().UnixNano())) a := make([]byte, a_size, a_size) for i := 0; i < len(a); i += 1 { a[i] = byte(r.Intn(0xFF) + 1) //随便赋值 } a_same := a[:copy_size] a_diff := make([]byte, copy_size, copy_size) for i := 0; i < len(a_diff); i += 1 { a_diff[i] = byte(r.Intn(0xFF) + 1) //随便赋值 } fmt.Printf("a:%p, a_same:%p, a_diff:%p\n", a, a_same, a_diff) t1 := time.Now().UnixNano() for i := 1; i < 1000000; i += 1 { copy(a, a_same) //a和a_same引用同一空间 } t2 := time.Now().UnixNano() fmt.Printf("copy same addr, time:%v\n", t2-t1) for i := 1; i < 1000000; i += 1 { copy(a, a_diff) //a和a_diff引用不同空间 } t3 := time.Now().UnixNano() fmt.Printf("copy diff addr, time:%v\n", t3-t2) }

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1168 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传