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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

將項(xiàng)目附加到最大大小切片時(shí)的附加行為

將項(xiàng)目附加到最大大小切片時(shí)的附加行為

Go
POPMUISE 2023-05-15 15:18:42
我對(duì)附加到已經(jīng)具有最大可能大小的切片時(shí)的行為感到困惑。據(jù)我了解,切片的最大大小可以是 int32 或 int64,具體取決于您的系統(tǒng)。執(zhí)行時(shí),我得到了符合我預(yù)期的test := make([]struct{},math.MaxInt64+1)錯(cuò)誤。len argument too large in make([]struct {})但是當(dāng)做類似的事情時(shí):test := make([]struct{},math.MaxInt64)for i:=0;i<100 ; i++ {    test = append(test, struct{}{})}fmt.Println(len(test))我預(yù)計(jì)程序會(huì)出現(xiàn)恐慌,但令人驚訝的是,代碼運(yùn)行時(shí)沒(méi)有任何問(wèn)題,并len返回一個(gè)溢出的值-9223372036854775709。有人可以詳細(xì)說(shuō)明這種行為嗎?(我用的是go1.11.2 linux/amd64)
查看完整描述

1 回答

?
鴻蒙傳說(shuō)

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊

規(guī)范說(shuō)明了任何切片的長(zhǎng)度和容量:

在任何時(shí)候都存在以下關(guān)系:

0?<=?len(s)?<=?cap(s)

這顯然違反了,因?yàn)殚L(zhǎng)度變?yōu)樨?fù)數(shù),因此小于 0。

Ian Lance Taylor 確認(rèn)這是一個(gè)錯(cuò)誤,而不是它應(yīng)該如何工作。正確的行為應(yīng)該是恐慌的說(shuō)法growslice: cap out of range,它應(yīng)該源自slice.go / growslice()函數(shù)(growslice()被稱為來(lái)自append())。

如果我們將您的示例稍微修改為:

s := make([]struct{}, math.MaxInt32-2)

fmt.Println(len(s), cap(s))

for i := 0; i < 5; i++ {

? ? s = append(s, struct{}{})

? ? fmt.Println(len(s), cap(s))

}

并在Go Playground上運(yùn)行它:


2147483645 2147483645

2147483646 2147483646

2147483647 2147483647

-2147483648 2147483647

-2147483647 2147483647

-2147483646 2147483647

MaxInt32正如我們所看到的,一旦達(dá)到32 位架構(gòu)和MaxInt6464 位架構(gòu),容量就會(huì)停止增長(zhǎng)。


查看完整回答
反對(duì) 回復(fù) 2023-05-15
  • 1 回答
  • 0 關(guān)注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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