是否對 unsafe.Pointer() 的參考進行計數,從而防止被垃圾收集?
就像,如果我有一個字串,它在范圍內時就存在,如果我有一個 *string,則字串在指標在范圍內時存在,但是如果我有一個 unsafe.Pointer(&s) (其中 s 是一個字串或其他)只要不安全的指標仍然指向它,s 就會保持在范圍內嗎?
我發現谷歌說一旦你轉換到一個 uintptr 它絕對不是,因為 uintptr 只是一個 int,但我無法找到任何關于 unsafe.Pointer() 的明確的任何方式。 可能是因為答案很明顯,但我不能絕對確定,因為我找不到任何可以準確解釋的內容。
如果我將 unsafe.Pointer 轉換為其他指標型別,我認為這不會改變什么?
uj5u.com熱心網友回復:
unsafe.Pointer 防止收集指標物件。
此外,Golang 使用跟蹤垃圾收集器,而不是參考計數。
這沒有明確拼寫,但可以從https://pkg.go.dev/unsafe#Pointer推斷出來
該檔案介紹了一些被認為是安全的 unsafe.Pointer 使用模式。特別是,從 T1* 到 Pointer 到 T2* 的轉換是有效的,只要 T2 不大于 T1 并且型別具有“等效記憶體布局”。
因此,從 T* 到 unsafe.Pointer 再轉換回 T* 是安全的,沒有任何限制。如果 unsafe.Pointer 沒有阻止參考的物件被收集,那么它就不安全。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/400787.html
