BlitzMax/語言/記憶體管理
外觀
BlitzMax 目前使用最佳化後的引用計數來實現記憶體管理。
但是,在處理迴圈資料結構時,需要特別注意記憶體管理。
迴圈資料結構是一種資料結構(在 BlitzMax 中,是使用者定義的型別),它可能“指向自身”。迴圈資料結構最極端的例子是
Type TCyclic Field cycle:TCyclic=Self End Type For k=1 To 10 Local cyclic:TCyclic=New TCyclic GCCollect Print GCMemAlloced() Next
執行此程式後,您會注意到記憶體正在緩慢洩漏。這是因為每個 TCyclic 物件的引用計數永遠不會達到 0,這是由於物件的“迴圈”欄位。
因此,必須確保此類迴圈資料結構得到乾淨的處理。這可以透過新增一個方法來“解除連結”任何此類迴圈來實現。例如
Type TCyclic Field cycle:TCyclic=Self Method Remove() cycle=Null End Method End Type For k=1 To 10 Local cyclic:TCyclic=New TCyclic GCCollect Print GCMemAlloced() cyclic.Remove Next
在實際應用中,這個問題很少出現,出現時通常是在設計容器型別時。
如果您對此有任何擔憂,您可以使用 BlitzMax 執行時庫中的 GCMemAlloced() 函式輕鬆跟蹤記憶體使用情況。