在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 545|回复: 1

[求助] 第一次发帖,想问一下绿皮书第三版中的一句话

[复制链接]
发表于 2024-12-2 16:53:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 Apologize2U 于 2024-12-2 16:59 编辑

位于P119,是关于类的一些内容,作者举了一个将类比作房子的蓝图的比喻。问题:最后一句话该怎么理解?
以下是原文

而SystemVerilog中,激励对象不断被创建并且用来驱动DUT,检查结果。最后这些对象占用的内存可以被释放,以供新的对象使用。回到房子的比喻:房子的地址一般都是静止的,除非房子被烧毁导致你不得不重新盖新房。而垃圾回收从来不会是自动的,除非家里有儿童。


 楼主| 发表于 2025-7-31 16:58:34 | 显示全部楼层
本帖最后由 Apologize2U 于 2025-7-31 17:06 编辑

看来帖子是沉了,我又重新读了一遍,打算结合AI自己解答一下。
比喻前提:将类视为一个房子的蓝图,而一个对象就是一个实际的房子,房子的地址像一个句柄,唯一标志了你的房子。
房子指的是对象,房子的地址(即对象的句柄)一般是不会变的,该句柄指向一个新的对象,旧对象没法被引用了,可以理解为烧毁旧房盖新房。而你原先的对象,虽然没有句柄指向他,但是它不会立即被销毁,这个意思就是不会自动垃圾回收。除非家里有儿童这句话,我去查了原句为Garbage collection at home is not automatic, especially if you have teenagers.一种可能的解释是:家里的垃圾不会自己消失,尤其是你家里还有青少年,(指青少年会不断制造垃圾)。sv没有垃圾回收,但是有内存管理,当有不再使用的对象时,就赋值为null,自动回收(但具体是什么时候是不得而知的)。
SystemVerilog 3.1a LRM   11.26 Memory management 内存管理
对象、字符串、动态数组和关联数组的内存是动态分配的。创建对象时,SystemVerilog分配更多内存。当一个对象不再需要时,SystemVerilog自动回收内存,使其可供重用。自动内存管理系统是SystemVerilog的一个组成部分。如果没有自动内存管理,SystemVerilog的多线程、可重入环境会给用户带来很多问题。手动内存管理系统,例如C语言的malloc和free提供的系统,是不够的。

例如,考虑如下的例子
myClass obj =new;
fork
    task1(obj);
    task2(obj);
join_none
在本例中,主进程(分离两个任务的进程)不知道何时可以使用对象obj完成这两个进程。同样,task1和task2都不知道其他两个进程何时不再使用对象obj。从这个简单的示例中可以明显看出,没有一个进程拥有足够的信息来确定何时释放对象是安全的。用户只有两种选择:(1)小心行事,永远不要回收对象,或者(2)添加某种形式的引用计数,用于确定何时可以安全回收对象。采用第一个选项可能会导致系统很快耗尽内存。第二种选择给用户带来了很大的负担,他们除了管理测试平台之外,还必须使用不太理想的模式来管理内存。为了避免上面缺点,SystemVerilog自动管理所有动态内存。用户不需要担心悬空引用、过早回收或内存泄漏。系统将自动回收不再使用的物品。在上面的示例中,用户所做的就是在不再需要句柄obj时将它赋值为null。类似地,当对象超出作用域时,系统隐式地将null赋值给该对象。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-8-10 18:10 , Processed in 0.013237 second(s), 3 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表