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

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

go1.4中是否需要放棄棧上過大的變量以避免棧復(fù)制?

go1.4中是否需要放棄棧上過大的變量以避免棧復(fù)制?

Go
人到中年有點(diǎn)甜 2021-09-10 15:25:37
我們知道,goroutine 的堆棧可以通過復(fù)制 go1.4 中的堆棧來增加。我的問題是,是否有必要在 go 中避免堆棧上的局部變量過大?例如func foo(){   var buf [8096]int   //do something with buf}或者var buf [8096]intfunc foo(){         //do something with buf}我的意思是,是否有必要使用后一個(gè)示例來避免由于堆棧復(fù)制而導(dǎo)致的大變量?
查看完整描述

2 回答

?
千萬里不及你

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

堆棧幾乎總是比堆快。在哪里定義變量更多的是關(guān)于范圍。由于 Go 是后一個(gè)示例中的詞法范圍語言,因此您弄臟了全局命名空間,使 var buf 在程序中的任何地方都可見。這是語義差異。所以你最好在語義上做正確的事情。


查看完整回答
反對(duì) 回復(fù) 2021-09-10
?
GCT1015

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

如果您不想在堆棧中重新分配另一個(gè)大對(duì)象,您應(yīng)該使用指針而不是全局變量。至于 go1.4,這段代碼有效:


package main


import "fmt"


func do(v *[3]int) {

    v[1] = 99

}


func main() {

    var r [3]int

    do(&r)

    fmt.Println(r)

    //Prints [0 99 0]

}

如果你不使用指針,這將失敗,因?yàn)閿?shù)組作為值傳遞,而不是引用:


package main


import "fmt"


func do(v [3]int) {

    v[1] = 99

}


func main() {

    var r [3]int

    do(r)

    fmt.Println(r)

    //Prints [0 0 0]

}

注意:這不適用于切片;切片總是作為參考傳遞。


查看完整回答
反對(duì) 回復(fù) 2021-09-10
  • 2 回答
  • 0 關(guān)注
  • 181 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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