[英]Weak Reference Finalizer Guaranteed to Run
Edward Yang 在《 GHC中的弱指針和終結器的代價》中寫道(強調):
弱指針還可以選擇與終結器關聯,終結器在對象被垃圾回收時運行。 Haskell終結器無法保證運行。
我找不到任何證實這一說法的文件。 System.Mem.Weak
中的文檔對此並不明確。 我需要知道的是,給定一些具有標識的原語( MutVar#
, MutableArray#
, Array#
等),如果我將終結器附加到該終結器,則在值被GCed時會可靠地調用它嗎?
原因是我正在考慮做這樣的事情:
data OffHeapTree = OffHeapTree
{ ref :: IORef ()
, nodeCount :: Int
, nodeArray :: Ptr Node
}
data Node = Node
{ childrenArray :: Ptr Node
, childrenCount :: Int
, value :: Int
}
我想確保在OffHeapTree
超出范圍時釋放數組(以及數組指向的所有內容)。 否則,它將泄漏內存。 那么,是否可以使用mkWeakIORef
可靠地完成此操作?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.