• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

SOC/IP验证工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

sv中浅复制和深复制的详解

句柄的传递
句柄可以用来创建多个对象,也可以前后指向不同对象
Transaction t1,t2; // 声明句柄
t1 = new(); // 创建对象并将其指针赋予t1
t2 = new(); // 创建对象并将其指针赋予t2
t1 = t2;
// 将t2的值赋予t1,t1和t2指向同一对象,
// t1之前指向的对象被释放
t2 = null;
// 将t2赋值为‘空’即不指向任何对象,
// 此时指针‘悬空’,悬空的指针很‘危险’

对象的复制
在SystemVerilog中,当一个class声明时会指定一个句柄handle(可以理解为C语言中的指针),该句柄handle指向一块存储空间,该存储空间后续只能存放该class数据类型的数据。在没有对其进行任何操作之前,该handle相当于没有指向任何实际的数据对象,只有在使用了new函数之后,才会为其开辟具体的存储对应class类型数据的存储空间。

对象的复制-shallow copy
常用的浅复制方法有:
tr2 = new tr1;
浅复制复制对象的所有属性;
浅复制不会调用new函数;
浅复制仅复制对象的所有属性,但不包括属性成员中句柄指向的对象!

对象的复制-deep copy
深复制就是创建一个新的和原始句柄指向的内容相同的字段,是两个一样大的数据段,所以两者的句柄指向的空间是不同的,但内容是相通的,之后的新对象中句柄指向的内容发生改变,不会引起原始对象中句柄指向内容也发生改变。

对象的销毁
软件编程的灵活在于可以动态地开辟使用空间,在资源闲置或者不再需要时,可以回收空间,这样使得内存空间保持在一个合理的区间。
SV也采用了自动回收空间的处理方式,使得用户不再软件空间的开销而烦恼。那么,自动回收空间的基本原理是什么呢?即,当一个对象,在整个程序中没有任何一个地方再‘需要’它时,便会被‘销毁’,即回收其空间。这里‘需要’的意思即指的是有句柄指向该对象。

posted on 2023-10-14 21:13  SOC验证工程师  阅读(209)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3