成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go Slice 里面放 Struct,應(yīng)該使用指針嗎?

開發(fā) 后端
很多人寫go 也寫了好多年了,但還是對go 的內(nèi)存結(jié)構(gòu)一無所知,除了內(nèi)存對齊以外,比如slice 里面到底應(yīng)該放結(jié)構(gòu)體([]MyStruct)還是結(jié)構(gòu)體指針([]*MyStruct),還是一頭霧水。

 

很多人寫go 也寫了好多年了,但還是對go 的內(nèi)存結(jié)構(gòu)一無所知,除了內(nèi)存對齊以外,比如slice 里面到底應(yīng)該放結(jié)構(gòu)體([]MyStruct)還是結(jié)構(gòu)體指針([]*MyStruct),還是一頭霧水。

Go slice 里面放struct 應(yīng)該使用指針嗎?

我們先通過一個性能測試,看一下這兩種情況下的性能對比:

我們先定義一個結(jié)構(gòu)體:

  1. type MyStruct struct { 
  2.     A int 
  3.     B int 

然后通過go自帶的benchmark測試一下,首先是使用指針的場景:

  1. func BenchmarkSlicePointers(b *testing.B) { 
  2.         b.ReportAllocs() 
  3.     for i := 0; i < b.N; i++ { 
  4.         slice := make([]*MyStruct, 0, 100) 
  5.         for j := 0; j < 100; j++ { 
  6.             slice = append(slice, &MyStruct{A: j, B: j + 1}) 
  7.         } 
  8.     } 

然后是直接放結(jié)構(gòu)體的場景:

  1. func BenchmarkSliceNoPointers(b *testing.B) { 
  2.     b.ReportAllocs() 
  3.     for i := 0; i < b.N; i++ { 
  4.         slice := make([]MyStruct, 0, 100) 
  5.         for j := 0; j < 100; j++ { 
  6.             slice = append(slice, MyStruct{A: j, B: j + 1}) 
  7.         } 
  8.     } 

跑一下:

  1. name               time/op 
  2. SlicePointers-8    2.50µs ± 2% 
  3. SliceNoPointers-8   117ns ± 1% 
  4. name               alloc/op 
  5. SlicePointers-8    1.60kB ± 0% 
  6. SliceNoPointers-8   0.00B      
  7. name               allocs/op 
  8. SlicePointers-8       100 ± 0% 
  9. SliceNoPointers-8    0.00 

可以看到使用指針的時候的性能要明顯低于直接使用結(jié)構(gòu)體,原因也很明顯,因為使用指針的時候,切面里面放的是指針,指針在單獨指向一個內(nèi)存區(qū)域,而直接使用結(jié)構(gòu)體則可以節(jié)省這部分的開銷。

所以,只有我們需要修改原來數(shù)據(jù),必須指針傳遞的時候,我們才將指針放到slice里面,這點希望大家注意。

 

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2023-03-13 13:36:00

Go擴(kuò)容切片

2023-03-06 08:01:25

structGo語言

2021-08-02 07:57:02

Struct指針函數(shù)

2022-02-09 16:02:26

Go 語言ArraySlice

2023-07-31 08:00:19

2017-08-31 11:28:47

Slice底層實現(xiàn)

2017-10-09 14:51:15

深度學(xué)習(xí)復(fù)數(shù)實數(shù)

2021-07-08 23:53:44

Go語言拷貝

2012-06-15 09:56:40

2023-11-28 11:44:54

Go切片

2017-10-20 14:46:26

深度學(xué)習(xí)復(fù)數(shù)噪聲

2025-05-22 09:32:23

2024-10-09 08:54:31

2020-11-23 14:22:17

代碼Go存儲

2019-12-10 13:55:10

Go指針存儲

2021-09-27 22:49:13

GoC 指針

2021-04-13 07:58:42

Go語言函數(shù)

2021-08-30 08:23:34

Go語言進(jìn)程

2022-11-26 00:22:14

引用類型數(shù)組

2021-05-14 08:58:18

非線性安全Go
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 午夜精品91| 夜夜摸天天操 | 国产日韩欧美电影 | 黄色一级网| 国产清纯白嫩初高生视频在线观看 | 亚洲高清视频在线观看 | 欧美高清视频 | 请别相信他免费喜剧电影在线观看 | 放个毛片看看 | 亚洲导航深夜福利涩涩屋 | 久久亚洲一区二区 | 9久9久9久女女女九九九一九 | 草草视频在线观看 | 亚洲欧美日韩在线不卡 | 国产精品1区2区 | 久久精品一区 | 亚洲国产一区二区三区, | 久久久久国产一区二区三区四区 | 日韩视频区 | 国产激情三区 | 国产一区二区在线播放 | 久久com | 国产成人99久久亚洲综合精品 | 日韩欧美黄色 | 人人叉| 久久久激情视频 | 日韩精品中文字幕一区二区三区 | 色资源在线视频 | 嫩草视频在线免费观看 | 亚洲视频免费一区 | av一区二区三区 | 日本免费视频在线观看 | 精品国产91 | 精品成人 | 在线免费观看成人 | 国产精品国产成人国产三级 | 亚洲一区中文字幕在线观看 | 在线成人 | 国产精品一区二区无线 | 国产在线精品一区二区 | 黄色片视频 |