golang切片

golang切片

内存拷贝耗费时间

package main

import (
	"fmt"
	"time"
)

func kb()  {
	data := make([]byte, 0)
	l := 1024
	for i := 0 ; i < l;i++ {
		data = append(data, uint8(1))
	}

	data2 := make([]byte, l, l)

	t := time.Now()
	copy(data2, data)
	fmt.Println("KB数据耗费时间为: ", time.Since(t).String())
}

func mb()  {
	data := make([]byte, 0)
	l := 1024 * 1024
	for i := 0 ; i < l;i++ {
		data = append(data, uint8(1))
	}

	data2 := make([]byte, l, l)

	t := time.Now()
	copy(data2, data)
	fmt.Println("MB数据耗费时间为: ", time.Since(t).String())
}

func gb()  {
	data := make([]byte, 0)
	l := 1024 * 1024 * 1024
	for i := 0 ; i < l;i++ {
		data = append(data, uint8(1))
	}

	data2 := make([]byte, l, l)

	t := time.Now()
	copy(data2, data)
	fmt.Println("GB数据耗费时间为: ", time.Since(t).String())
}



func main() {
	kb()
	time.Sleep(time.Microsecond * 300)

	mb()
	time.Sleep(time.Microsecond * 300)

	gb()
	time.Sleep(time.Microsecond * 300)
}

测试结果

F:code_megithubevio-master	elnet3>go run main.go
KB数据耗费时间为:  0s
MB数据耗费时间为:  516.3µs
GB数据耗费时间为:  400.2188ms

F:code_megithubevio-master	elnet3>go run main.go
KB数据耗费时间为:  0s
MB数据耗费时间为:  0s
GB数据耗费时间为:  433.0305ms

F:code_megithubevio-master	elnet3>go run main.go
KB数据耗费时间为:  0s
MB数据耗费时间为:  0s
GB数据耗费时间为:  379.715ms

F:code_megithubevio-master	elnet3>go run main.go
KB数据耗费时间为:  0s
MB数据耗费时间为:  0s
GB数据耗费时间为:  377.2188ms

F:code_megithubevio-master	elnet3>go run main.go
KB数据耗费时间为:  0s
MB数据耗费时间为:  521.6µs
GB数据耗费时间为:  123.0336ms

F:code_megithubevio-master	elnet3>go run main.go
KB数据耗费时间为:  0s
MB数据耗费时间为:  1.0286ms
GB数据耗费时间为:  376.8729ms

啪的一下,很快啊

copy()函数

package main

import (
	"fmt"
)

func main() {
	data := make([]byte, 0)
	l := 10
	for i :=0; i < l;i++ {
		data = append(data, uint8(1))
	}

	tmm := []byte{uint8(2), uint8(3), uint8(3), uint8(3)}

	data = data[3:6]
	fmt.Println(len(data), cap(data))

	copy(data, tmm)
	fmt.Println(len(data), cap(data))
	fmt.Println(data)
}



## 输出
3 13
3 13
[2 3 3]
原文地址:https://www.cnblogs.com/maomaomaoge/p/14967471.html