IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 理解sv中的句柄(handle)与C中的指针(pointer) -> 正文阅读

[C++知识库]理解sv中的句柄(handle)与C中的指针(pointer)

1、背景

? ? ? ? 指针是C语言的一个重要组成部分,是C语言的核心、精髓所在。用好指针,可以在C语言编程中起到事半功倍的效果:一方面,可以提高程序的编译效率、执行速度以及实现动态的存储分配;另一方面,可是程序更灵活,便于表示各种数据结构,编写高质量的程序。

Systemverilog作为源自C的编程语言,保留了很多与C类似的关键字和特性,但是sv中没有指针,其实,对sv对象的引用是采用对象句柄(object handle),它与C指针概念接近,但又不完全相同。

2、C语言的指针

? ? ? ? ? ?系统内存好比带有编号的小房间,如果需要使用内存就需要得到房间编号。如图,定义一个整型变量i,整型变量需要4个字节,所以编译器为变量i分配的编号为1000~1003。什么是地址呢?地址就是内存区中对每个字节的编号,图中的1000、1001、1002、1003就是地址

?进一步说明,看下图,所示的1000、1004等就是内存单元的地址,而0、1就是内存单元的内容,换种说法就是基本整型变量i在内存中的地址从1000开始。因为基本整型占4字节,所以变量j在内存中的起始地址为1004,变量i的内容为0,j的内容为2。

???????

?

指针是什么呢?这里仅将指针看作是内存的一个地址,多数情况下,这个地址是内存中的另一个变量的位置,如下图所示。在程序中定义一个变量,在进行编译时就会给改变量在内存中分配一个地址,通过访问这个地址可以找到所需的变量,这个变量的地址成为该变量的指针。地址1000是变量i的指针。

?变量与指针:变量的地址是变量(i)和指针(p)二者之间连接的纽带。将变量i的地址存放到指针变量p中,p就指向i,其关系如下:

2、SV中的句柄

?总感觉SV绿皮书里没有把句柄讲的很明白,了解了C中指针的意义,有利于理解sv中的句柄。句柄的基本功能跟指针一样,都是用来指向具体对象,及句柄本身的值就是对象所占内存空间的起始地址。

句柄与指针相比,能力有限,区别主要体现在以下几方面:

句柄与指针区别
1

C指针可以会指向任意类型的数据对象,而句柄只能指向类例化出来的对象。在SV中,如果需要在函数中引用外部变量,则可以在参数列表中给对应参数加上ref关键字。

2

C指针允许做数值计算,而句柄不能。指针很灵活,程序员可以修改它的值,比如在索引数组元素的时候,是可以通过递增数组指针的值来达到这一目的的。SV中句柄显然不能这么干,只能老老实实用下标来索引数组。

3

C指针能够灵活的类型转换(Casting),而SV句柄则被严格限制。在SV中,句柄类型转换需要用内建函数$cast来实现动态转换。而且要让对象指针casting成功,除了同类型相互casting,一般只有一种结果,即父类句柄指向子类对象。casting的成功与否,可以用来判断类型是否正确,这也是工作中经常采用的方法。

4

SV中没有被句柄指向的对象会被自动垃圾回收(garbage collected),而没有被C指针指向的数据对象需要程序员自己做内存释放和回收。这一点也是很多在介绍SV特性的时候会提到的点。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-18 15:47:14  更:2021-12-18 15:48:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:53:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码