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() 函数轻松跟踪内存使用情况。