1. 程式人生 > 其它 >golang切片

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]