第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 go 中,是否值得避免創(chuàng)建大小為 0 的切片?

在 go 中,是否值得避免創(chuàng)建大小為 0 的切片?

Go
元芳怎么了 2021-11-15 20:53:06
我有一個程序,我將在其中制作很多切片,其中一些可能是空的:nb := something() // something might return 0slices = append(slices, make([]int, nb))是否make([]int, 0)分配了一些內(nèi)存,因此nil盡管它們共享相同的行為,但內(nèi)存效率不如切片?到多少?如果是這樣,是否值得進行測試以避免無用的分配,或者測試的 CPU 時間成本是否不值得節(jié)省內(nèi)存(或任何其他不這樣做的原因)?var sl slicenb := something()if nb > 0 {    sl = make([]int, nb)}slices = append(slices, sl)
查看完整描述

2 回答

?
寶慕林4294392

TA貢獻2021條經(jīng)驗 獲得超8個贊

之間分配的內(nèi)存沒有區(qū)別

var a []T // nil slice

a := make([]T, 0) // zero-length, zero-capacity, non-nil slice

不同之處在于切片標頭內(nèi)容。在第二種情況下,切片指針包含一些固定地址,對于所有 0 大小的分配都是相同的。

如果此代碼位于程序的性能關(guān)鍵部分,則差異會產(chǎn)生……相當大的差異。在第一種情況下,您將切片標頭歸零,在第二種情況下,您會經(jīng)歷 3-4 次函數(shù)調(diào)用,在 malloc 返回指向零基的指針之前,對 cap 和 length 進行一些范圍檢查等。


查看完整回答
反對 回復(fù) 2021-11-15
?
繁花不似錦

TA貢獻1851條經(jīng)驗 獲得超4個贊

make([]int, 0) 是否分配了一些內(nèi)存

是的,它分配了一個切片頭,但沒有后備數(shù)組。如果切片頭沒有轉(zhuǎn)義當前范圍,它可能會在堆棧上分配。

內(nèi)存效率低于零切片

在使用的內(nèi)存方面,它們是相同的。

是否值得進行測試以避免無用的分配

一般來說,與執(zhí)行內(nèi)存分配和初始化所需的周期相比,比較 int 所需的 3 或 4 條指令算不了什么。


查看完整回答
反對 回復(fù) 2021-11-15
  • 2 回答
  • 0 關(guān)注
  • 262 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號