亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

會花時間。勾選導致內存泄漏,而我永遠不需要停止它?

會花時間。勾選導致內存泄漏,而我永遠不需要停止它?

Go
莫回無 2022-09-12 17:05:02
請考慮以下代碼:go func() {    for now := range time.Tick(time.Minute) {        fmt.Println(now, statusUpdate())    }}()我需要for循環永遠運行,永遠不需要停止它。這會導致內存泄漏嗎?我知道如果我需要中斷for循環,它會導致內存泄漏。但是,如果我不需要中斷 for 循環呢?醫生說雖然Tick對于不需要關閉股票代碼的客戶端很有用,但請注意,如果沒有辦法關閉它,垃圾回收器無法恢復底層的股票代碼;它“泄漏”。我只是想把它做好。
查看完整描述

1 回答

?
UYOU

TA貢獻1878條經驗 獲得超4個贊

首先,讓我們從維基百科中看一下“內存泄漏”的定義:

在計算機科學中,內存泄漏是一種資源泄漏,當計算機程序錯誤地管理內存分配時,就會發生這種泄漏,而不再需要的內存不會被釋放。

重要的是要注意,在您引用的文檔中,它沒有特別提到“內存泄漏”,只是“泄漏”(意思是“資源泄漏”)。有問題的資源不僅是股票代碼使用的內存,而且是運行它的戈魯廷。因此,我將此定義更廣泛地解釋為適用于“資源泄漏”。

正如您引用的文檔所提到的,無法釋放股票代碼的資源。time.Tick

因此,根據此定義,如果在程序的任何后續點不再需要該股票代碼,則發生了資源泄漏。如果在創建后程序的其余部分始終需要該股票代碼,則它不是泄漏。

然而,在維基百科的定義中,還有這個注釋:

當對象存儲在內存中但運行中的代碼無法訪問時,也可能發生內存泄漏。

同樣,無法釋放股票代碼的資源。time.Tick

因此,根據這個持續的定義,你可能會說使用總是資源泄漏。time.Tick

實際上,只要您越過了沒有ing,您就有合理的保證,即該代碼將繼續用于程序的其余部分,并且不會有“泄漏”。如果您懷疑股票代碼是否會被永久使用,請使用時間。新投票器和它適當地:rangetime.TickbreakStop()

go func() {

    ticker := time.NewTicker(time.Minute)

    defer ticker.Stop()


    for now := range ticker.C {

        fmt.Println(now, statusUpdate())

        // some exception

        if (something) {

            break

        }

    }

}()


查看完整回答
反對 回復 2022-09-12
  • 1 回答
  • 0 關注
  • 100 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號