System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种C++语言高效的指针实现和应用方法及装置制造方法及图纸_技高网
当前位置: 首页 > 专利查询>之江实验室专利>正文

一种C++语言高效的指针实现和应用方法及装置制造方法及图纸

技术编号:40531975 阅读:7 留言:0更新日期:2024-03-01 13:52
本发明专利技术公开了一种C++语言高效的指针实现和应用方法及装置,本发明专利技术方法通过自定义指针类,相对于传统指针的解引用操作,可以节省一次动态存储器的访问操作,从而提高解引用指针的性能。同时,由于该方法的存储特性:指针指向的内容直接存储在指针的数据结构内部即存放在私有成员变量内部,而不是像传统指针一样,将内容存储在堆上,因此可以节省所需的存储空间。再者,由于C++语言本身的特性,该方法实现的指针可以和C++语言的原生数据类型进行无障碍的互操作,极大的便利了该指针的应用。

【技术实现步骤摘要】

本专利技术涉及高性能计算,具体而言,涉及一种c++语言高效的指针实现和应用方法及装置。


技术介绍

1、在现代计算机系统中,许多计算机程序把问题建模成相互关联的对象集合。在执行过程中,这种程序对在计算机系统的存储器中存储为数据结构的对象执行操作。对象可以具有许多属性,包括代表与其它对象的关系的属性。当第一对象具有代表与第二对象的关系的属性时,该第一对象被称为源对象,而第二对象被称为目标对象。

2、“引用”用来表示代表与目标对象的关系的属性。对目标对象的引用存储在代表源对象的数据结构中。许多程序使用“指针”的数据类型来引用目标对象。指针是用于构建各种软件的重要组件,它指示对应于目标对象的数据结构的存储器位置。为了允许程序访问到更多的对象,指针通常包含目标对象的虚拟存储器地址,而不是目标对象所在的动态存储器位置的实际物理地址。

3、简而言之,指针即内存单元的地址或者称为内存单元编号。在编程中,指针的重要性在于其为程序编写添加了一层抽象,提高了程序的灵活性。因此,在编程过程中,特别是c/c++编程语言中,指针得到了广泛应用。

4、针对指针的使用主要包含以下两项:(1)对指针的解引用(*ptr):这本质上是对指针指向的地址进行内存访问。这个过程涉及了两次存储器的访问。第一次是对指针本身的访问,由于编译器的优化,运行环境等的影响,cpu可能实际访问物理内存单元,也可能当指针本身存储在缓存之中时访问缓存。第二次是访问指针所指向的内存地址中的数据。第二次访问与第一次cpu访问的运行速度相比,是一次比较慢的存储器访问,因为第二次访问需要访问到动态存储器。(2)取地址操作:对于申请堆的内存空间,通常由malloc或者new来获取地址。而对于栈上面的变量,其地址通常就是当前栈帧上该变量的地址。综上所述,对于(1)中所述的指针解引用操作,第二次访问需要访问指针所指向的动态存储器单元,这是一个相对耗时的操作。因此,指针在进行内存访问的过程中对性能有影响,存在性能开销。

5、在linux平台上,malloc函数通常会返回一个已分配内存空间的内存地址。这个地址并非完全随机的,通过观察malloc函数返回的地址值或者查询技术文档(https://man7.org/linux/man-pages/man3/malloc.3.html),可以获知,该地址是一个内存对齐的地址值,而不是一个完全随机的地址值,这意味着这个指针的低位是可以被保证为0。例如在64bit位宽的机器上,这个地址值是照16位的对齐方式进行对齐,也就是说,它的低4位一定是0。

6、中国专利文献cn110704188a公开了一种内存分配器优化方法、装置、设备、存储介质。内存分配器优化方法包括:通过查找函数查找虚拟机全局符号;在所述虚拟机全局符号指向的内存地址中搜索初始内存分配器的结构体的内存地址;将搜索的所述初始内存分配器的结构体的内存地址转换为指向所述初始内存分配器的结构体的指针变量;搜索得到目标内存分配器的结构体;将指向所述初始内存分配器的结构体的指针变量指向所述目标内存分配器的结构体的内存地址,同时断开所述指针变量原来指向的所述初始内存分配器的结构体的内存地址。虽然上述方法可以实现通过内存搜索和动态替换,扩展优化线性内存分配器的大小,提升了用户的使用体验。但是针对指针应用中的性能问题,该方法尚未揭示任何有效解决手段。

7、中国专利文献cn114741335a公开了一种缓存管理方法、装置、介质及设备。该方法包括:若存储在缓存区域中的对象数据被调用,则根据对象数据创建用于指向对象数据的第一引用指针;并且将第一引用指针存入第一引用表中,将对象数据的预设参数增加第一数值;再通过第一引用表中的第一引用指针的数量以及存入先后顺序对第一引用指针进行释放,且所释放的第一引用指针的对象数据的预设参数减去第一数值;当对象数据的预设参数小于或等于第一预设阈值时,将对象数据从缓存区域中释放。上述方法能够在保证应用运行性能的情况下,降低应用所占的系统内存,实现对于缓存管理的优化。针对指针应用中的性能问题,该方法尚未揭示任何有效解决手段。

8、中国专利文献cn113721925a公开了一种存储介质、内存指针的编译方法和装置,该编译方法包含:分析编译单元中的内容,用于确定指针操作数和指针形式参数所指向的物理地址空间;为每个能够确定物理地址空间的第一指针操作数和第一指针形式参数更新编译单元中的代码,用于让第一指针操作数和第一指针形式参数携带物理地址空间信息;针对每个不能够确定物理地址空间的第二指针操作数和第二指针形式参数,插入调用编码函数的指令和/或调用解码函数的指令,用于让编译单元被执行时确定第二指针操作数和第二指针形式参数所指向的物理地址空间。虽然该专利技术通过如上所述的编译方法,当芯片架构中没有支持泛型指针的硬件而软件中使用了泛型指针,软件依然可以正常运行。同样,针对指针应用中的性能问题,该方法尚未揭示任何有效解决手段。


技术实现思路

1、鉴于上述,本专利技术的目的是提供一种c++语言高效的指针实现和应用方法及装置,旨在解决指针应用中的性能瓶颈,从而提高指针的使用性能并节省指针使用的空间。

2、本专利技术采用的技术方案如下:

3、第一方面,本专利技术实施例提供了一种c++语言高效的指针实现和应用方法,所述方法包括:

4、定义自定义指针类,所述指针类包括私有成员函数、私有成员变量,所述私有成员函数接收malloc函数返回的指针所指向的地址,初始化私有成员变量并设置私有成员变量的最低位为1,对指针所指向的地址进行解引用操作,将解引用后的值左移4位后与私有成员变量进行布尔运算,并将运算后的结果赋值给私有成员变量;

5、定义所述自定义指针类的构造函数,所述构造函数通过调用自定义类中的私有成员函数将c++原生的指针类型转化为自定义指针类中的指针类型,并将malloc函数返回的指针所指向的内存释放;

6、重载所述自定义指针类的运算操作符成员函数,重载后的运算操作符成员函数提取私有成员变量的低4位,若最低位为1,则将私有成员变量的值右移4位后返回,相当于返回指针所指向的值。

7、优选地,所述的布尔运算是或运算。

8、优选地,所述的自定义指针类中的指针类型是64位整数,所述的私有成员变量的数据类型是64位整数类型。

9、优选地,所述的自定义指针类只针对malloc函数返回的指针所指向的地址进行处理。

10、优选地,所述的将malloc函数返回的指针所指向的内存释放包括:通过调用c++标准库中的free函数将malloc函数返回的指针所指向的内存释放。

11、优选地,所述的重载后的运算操作符成员函数提取私有成员变量的低4位,若最低位不为1,则调用c++标准库中的abort函数,中止进程。

12、优选地,所述的方法在64位的linux平台上运行。

13、第二方面,本专利技术实施例提供了一种c++语言高效的指针实现和应用本文档来自技高网...

【技术保护点】

1.一种C++语言高效的指针实现和应用方法,其特征在于,所述方法包括:

2.根据权利要求1所述的C++语言高效的指针实现和应用方法,其特征在于,所述的布尔运算是或运算。

3.根据权利要求1所述的C++语言高效的指针实现和应用方法,其特征在于,所述的自定义指针类中的指针类型是64位整数类型,所述的私有成员变量的数据类型是64位整数类型。

4.根据权利要求1所述的C++语言高效的指针实现和应用方法,其特征在于,所述的自定义指针类只针对malloc函数返回的指针所指向的地址进行处理。

5.根据权利要求1所述的C++语言高效的指针实现和应用方法,其特征在于,所述的将malloc函数返回的指针所指向的内存释放包括:通过调用C++标准库中的free函数将malloc函数返回的指针所指向的内存释放。

6.根据权利要求1所述的C++语言高效的指针实现和应用方法,其特征在于,所述的重载后的运算操作符成员函数提取私有成员变量的低4位,若最低位不为1,则调用C++标准库中的abort函数,中止进程。

7.根据权利要求1所述的C++语言高效的指针实现和应用方法,其特征在于,所述的方法在64位的Linux平台上运行。

8.一种C++语言高效的指针实现和应用装置,其特征在于,所述装置包括:

9.一种计算设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上执行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1-7任一项所述的C++语言高效的指针实现和应用方法的步骤。

10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理执行时实现权利要求1-7任一项所述的C++语言高效的指针实现和应用方法的步骤。

...

【技术特征摘要】

1.一种c++语言高效的指针实现和应用方法,其特征在于,所述方法包括:

2.根据权利要求1所述的c++语言高效的指针实现和应用方法,其特征在于,所述的布尔运算是或运算。

3.根据权利要求1所述的c++语言高效的指针实现和应用方法,其特征在于,所述的自定义指针类中的指针类型是64位整数类型,所述的私有成员变量的数据类型是64位整数类型。

4.根据权利要求1所述的c++语言高效的指针实现和应用方法,其特征在于,所述的自定义指针类只针对malloc函数返回的指针所指向的地址进行处理。

5.根据权利要求1所述的c++语言高效的指针实现和应用方法,其特征在于,所述的将malloc函数返回的指针所指向的内存释放包括:通过调用c++标准库中的free函数将malloc函数返回的指针所指向的内存释放。

6.根据权利要求1所述的...

【专利技术属性】
技术研发人员:周向真吕晓刚蒋丹
申请(专利权)人:之江实验室
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1