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

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

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

 

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

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

我們先通過(guò)一個(gè)性能測(cè)試,看一下這兩種情況下的性能對(duì)比:

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

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

然后通過(guò)go自帶的benchmark測(cè)試一下,首先是使用指針的場(chǎng)景:

  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)體的場(chǎng)景:

  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 

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

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

 

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

2021-08-02 07:57:02

Struct指針函數(shù)

2023-03-13 13:36:00

Go擴(kuò)容切片

2023-03-06 08:01:25

structGo語(yǔ)言

2022-02-09 16:02:26

Go 語(yǔ)言ArraySlice

2023-07-31 08:00:19

2017-08-31 11:28:47

Slice底層實(shí)現(xiàn)

2017-10-20 14:46:26

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

2017-10-09 14:51:15

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

2012-06-15 09:56:40

2023-11-28 11:44:54

Go切片

2021-07-08 23:53:44

Go語(yǔ)言拷貝

2025-05-22 09:32:23

2024-10-09 08:54:31

2020-11-23 14:22:17

代碼Go存儲(chǔ)

2021-08-30 08:23:34

Go語(yǔ)言進(jìn)程

2019-12-10 13:55:10

Go指針存儲(chǔ)

2021-09-27 22:49:13

GoC 指針

2021-04-13 07:58:42

Go語(yǔ)言函數(shù)

2022-11-26 00:22:14

引用類型數(shù)組

2021-05-14 08:58:18

非線性安全Go
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 色视频在线播放 | 国产精品美女久久久久久免费 | 欧美精品在线免费 | 久久久精品一区二区三区 | 国产精品1区 | 午夜爽爽爽男女免费观看 | 亚洲成人免费观看 | 五月天婷婷综合 | 亚洲视频 欧美视频 | 国产一区二区三区在线 | 蜜臀网| 久久久蜜桃 | 欧美日韩福利视频 | a级免费观看视频 | 中文字幕日韩欧美 | 亚洲精品一区二区三区中文字幕 | 欧美一级毛片久久99精品蜜桃 | 成人在线国产 | 精品婷婷 | 欧美一区二区精品 | 成年人在线视频 | 国产一区二区高清在线 | 91av导航| 日日射影院 | 91福利网| 黄免费观看视频 | 久久国产精品-国产精品 | 国产精品视频二区三区 | 亚洲精品乱码久久久久久蜜桃 | 国产高清在线精品 | 亚洲不卡一 | 亚洲一区二区三区免费在线观看 | 欧美一级久久 | 国产一级免费视频 | 久久久久久女 | 国产精品欧美一区二区三区 | 亚洲日韩中文字幕一区 | 精品亚洲一区二区三区 | 色欧美片视频在线观看 | 天堂综合网 | 国产精品一区二区三区在线 |