【发布时间】:2020-07-23 23:05:16
【问题描述】:
所以我的问题是:“标题”以及 SystemVerilog 中动态数组的垃圾收集规则是什么?
上下文:
在我的程序中,我发现了一个错误,您可以在函数中(本地)实例化一个动态数组并在该函数内向该数组添加元素,但如果您不删除该数组,则条目仍保留在那里(即内存和参考被保留)。因此,当您再次调用该函数时,可以访问之前输入的所有条目。解决方案是在退出函数之前简单地删除动态数组。我假设数组没有被删除,因为数组是在堆而不是堆栈上实例化的,并且编译器不知道何时垃圾收集它,因为它可能是返回的引用(如果我错了,请纠正我 -我对动态数组的垃圾回收规则不熟悉)。
但是,如果动态数组在类中实例化(作为成员变量)会发生什么?你怎么知道动态数组是否被删除(即引用和内存被删除)?这种情况下的垃圾回收规则是什么?
如果有帮助,我有示例代码来演示该问题,但我认为没有必要包含它(如果您需要示例,请告诉我)。 附:关联数组也会发生同样的事情(因为我认为它是 SystemVerilog 中动态数组类型的一种形式)。
谢谢!
【问题讨论】:
-
您在现实中看到的错误很可能是静态变量的正常行为。因此,在这种情况下需要一个示例。如果一个类包含一个非静态数组成员,那么一旦该类被垃圾回收并且当且仅当该数组没有在其他任何地方引用时,它的内存就应该被回收。如果您在那里发现问题,则必须与工具提供商联系。
标签: arrays garbage-collection associative-array system-verilog dynamic-arrays