我經(jīng)常使用結(jié)構(gòu)片。這是此類結(jié)構(gòu)的示例:type MyStruct struct {
val1, val2, val3 int
text1, text2, text3 string
list []SomeType}所以我定義我的切片如下:[]MyStruct假設(shè)我有大約一百萬個(gè)元素,并且我正在大量使用切片:我經(jīng)常添加新元素。(元素總數(shù)未知。)我時(shí)不時(shí)地整理一下。我還刪除了元素(雖然沒有添加新元素那么多)。我經(jīng)常閱讀元素并將它們傳遞(作為函數(shù)參數(shù))。元素本身的內(nèi)容不會(huì)改變。我的理解是,這會(huì)導(dǎo)致對(duì)實(shí)際結(jié)構(gòu)的大量改組。另一種方法是創(chuàng)建一個(gè)指向結(jié)構(gòu)的指針:[]*MyStruct現(xiàn)在結(jié)構(gòu)體保持原樣,我們只處理我認(rèn)為占用空間較小的指針,因此會(huì)使我的操作更快。但是現(xiàn)在我給垃圾收集器做更多的工作。你能提供什么時(shí)候直接使用結(jié)構(gòu)體還是什么時(shí)候使用指向結(jié)構(gòu)體的指針的一般指南嗎?我是否應(yīng)該擔(dān)心留給 GC 的工作量是多少?復(fù)制結(jié)構(gòu)與復(fù)制指針的性能開銷可以忽略不計(jì)?也許一百萬個(gè)元素并不多。當(dāng)切片變得更大(但仍然適合 RAM,當(dāng)然)時(shí),所有這些如何變化?
結(jié)構(gòu)切片與指向結(jié)構(gòu)的指針切片
慕碼人8056858
2021-09-10 15:11:47