每当我调用generate_directed_packet
时,都会创建一个新对象。在创建下一个包对象之前,我是否应该担心删除包对象。如果是这样,我该如何删除数据包对象?
function void generate_directed_packet();
packet = new();
void'(packet.randomize());
endfunction : generate_directed_packet
答案 0 :(得分:2)
SystemVerilog具有自动内存管理功能。这意味着只要有一个包含该对象句柄的类变量,它就只保存一个对象。模拟器"删除"在没有更多具有该对象句柄的类变量之后的对象。 "删除"是引号,因为你不知道它什么时候删除对象。更有可能的是,它将空间保持到同一个对象的另一个new()并回收空间。
如果您使用的是UVM,典型的情况是您按序列生成数据包,并将它们发送给驱动程序。你真正在做的是创建序列中新对象的句柄,然后将句柄中的变量的句柄复制到驱动程序中的变量。
将句柄从一个变量复制到另一个变量时,将删除对旧对象的引用。因此,只要将数据结构中的句柄放入对象中,随着向对象句柄添加更多对象句柄而增长,旧对象的空间就会被回收。