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_me\github\evio-master\telnet\3>go run main.go
KB数据耗费时间为: 0s
MB数据耗费时间为: 516.3µs
GB数据耗费时间为: 400.2188ms
F:\code_me\github\evio-master\telnet\3>go run main.go
KB数据耗费时间为: 0s
MB数据耗费时间为: 0s
GB数据耗费时间为: 433.0305ms
F:\code_me\github\evio-master\telnet\3>go run main.go
KB数据耗费时间为: 0s
MB数据耗费时间为: 0s
GB数据耗费时间为: 379.715ms
F:\code_me\github\evio-master\telnet\3>go run main.go
KB数据耗费时间为: 0s
MB数据耗费时间为: 0s
GB数据耗费时间为: 377.2188ms
F:\code_me\github\evio-master\telnet\3>go run main.go
KB数据耗费时间为: 0s
MB数据耗费时间为: 521.6µs
GB数据耗费时间为: 123.0336ms
F:\code_me\github\evio-master\telnet\3>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]