System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 用于编译优化的方法及计算设备技术_技高网

用于编译优化的方法及计算设备技术

技术编号:41288764 阅读:7 留言:0更新日期:2024-05-11 09:37
本发明专利技术提供一种用于编译优化的方法及计算设备,所述方法包括:获取由编译器输出的控制流图,所述控制流图包括多个节点,所述多个节点至少包括一个入口节点和一个出口节点;选取所述控制流图中任一节点作为第一节点,所述第一节点包括构造函数;计算所述第一节点的支配边界;遍历所述支配边界的所有节点的前驱节点;选取任一所述前驱节点作为第二节点;若所述第一节点支配所述第二节点,则确定所述第二节点属于所述第一节点的作用域边界;得到所述作用域边界后,基于所述作用域边界插入析构函数,以用于实现所述内存资源的回收。根据本发明专利技术的技术方案能够在控制流图结构中找到节点的作用域边界,从而可在适当的位置插入析构函数。

【技术实现步骤摘要】

本专利技术涉及计算机,具体涉及一种用于编译优化的方法及计算设备


技术介绍

1、一般c++对象的析构函数是在前端解析或者生成代码(codegen)的时候插入,现有类似c++的编程语言,其中自定义的某些对象的析构函数需要在优化之后再插入,经过很多遍(pass)优化之后会生成一个cfg的结构。如何从cfg结构中找到对象的构造函数,并在合适的地方插入析构函数,为亟待解决的问题。


技术实现思路

1、本专利技术旨在提供用于编译优化的方法及计算设备,能够在cfg结构中准确找到节点的作用域边界,从而可在适当的位置插入析构函数。

2、根据本专利技术的一方面,提供一种用于编译优化的方法,适于通过处理器执行,所述方法包括:

3、获取由编译器输出的控制流图,所述控制流图包括多个节点,所述多个节点至少包括一个入口节点和一个出口节点;

4、选取所述控制流图中任一节点作为第一节点,所述第一节点包括构造函数,所述构造函数用于向计算设备申请内存资源;

5、计算所述第一节点的支配边界;

6、遍历所述支配边界的所有节点的前驱节点;

7、选取任一所述前驱节点作为第二节点;

8、若所述第一节点支配所述第二节点,则确定所述第二节点属于所述第一节点的作用域边界;

9、得到所述作用域边界后,基于所述作用域边界插入与所述第一节点中的所述构造函数相应的析构函数,以用于实现所述内存资源的回收。

10、根据一些实施例,所述控制流图对应一个函数时,根据所述函数中的跳转指令划分节点,所有的返回语句合成一个节点。

11、根据一些实施例,若所述第一节点支配所述控制流图中所有节点,则所述第一节点的所述作用域边界为返回节点。

12、根据一些实施例,得到所述作用域边界后,基于所述作用域边界插入析构函数,包括:

13、当所述第一节点中的不存在分支语句的构造函数被代码块符号包裹且所述构造函数含有定义的变量,对于变量插入析构函数时插入在所述第一节点的作用域边界。

14、根据一些实施例,得到所述作用域边界后,基于所述作用域边界插入析构函数,包括:

15、在循环三段式的第一段中或条件语句中,若有定义对象的情况,则在所述作用域边界插入所述对象的析构函数。

16、根据一些实施例,得到所述作用域边界后,基于所述作用域边界插入析构函数,包括:

17、所述循环三段式中的位于第二段的循环体必须执行一次的情况下,将被循环内节点支配的循环外节点排查掉;

18、根据支配边界找到循环中节点的真正作用域以插入正确的析构函数。

19、根据一些实施例,所述循环三段式中的位于第二段的循环体必须执行一次的情况下,需要进行分析循环,将被循环内节点支配的循环外节点排查掉,包括:使用低级开源优化框架中的循环信息结构体来分析循环。

20、根据一些实施例,更改所述作用域边界,但避免造成对象跨作用域使用、或者避免内存泄漏。

21、根据本专利技术的另一方面,提供一种非瞬时性计算机可读存储介质,其上存储有计算机可读指令,当所述计算机可读指令被处理器执行时,使得所述处理器执行前述任一项所述的方法。

22、根据本专利技术的另一方面,提供一种计算设备,包括:

23、处理器;以及

24、存储器,存储有计算机程序,当所述计算机程序被所述处理器执行时,使得所述处理器执行如上任一项所述的方法。

25、根据本专利技术的另一方面,提供一种非瞬时性计算机可读存储介质,其上存储有计算机可读指令,当所述指令被处理器执行时,使得所述处理器执行如上任一项所述的方法。

26、根据本专利技术的实施例,为了对计算设备的内存资源充分利用,对于编译器输出的控制流图,通过计算支配边界,从节点中获取对象的支配边界,支配边界提供了关于代码块的精确信息,特别是在复杂的控制流结构中,这使得编译器可以据此准确地知道在节点的作用域边界,从而可基于作用域边界在适当的位置插入析构函数,以确保在所有可能的退出路径上都执行了必要的清理操作,有助于编译器更精确、高效地处理对象的生命周期管理,从而产生更好的优化代码,确保正确地完成内存管理和资源回收,提升计算系统的效能。

27、根据一些实施例,使用支配边界来确定析构函数的位置可以避免不必要的重复工作。例如,在循环体结束时插入析构函数可能会导致多次清理同一个对象,而通过支配边界分析可以确定一个最佳位置,只在真正离开循环的时候进行清理。

28、应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本专利技术。

本文档来自技高网...

【技术保护点】

1.一种用于编译优化的方法,适于通过处理器执行,其特征在于,所述方法包括:

2.根据权利要求1所述的方法,其特征在于,

3.根据权利要求1所述的方法,其特征在于,

4.根据权利要求1所述的方法,其特征在于,得到所述作用域边界后,基于所述作用域边界插入析构函数,包括:

5.根据权利要求3所述的方法,其特征在于,得到所述作用域边界后,基于所述作用域边界插入析构函数,包括:

6.根据权利要求1所述的方法,其特征在于,得到所述作用域边界后,基于所述作用域边界插入析构函数,包括:

7.根据权利要求6所述的方法,其特征在于,所述循环三段式中的位于第二段的循环体必须执行一次的情况下,需要进行分析循环,将被循环内节点支配的循环外节点排查掉,包括:使用低级开源优化框架中的循环信息结构体来分析循环。

8.根据权利要求1所述的方法,其特征在于,还包括:在未造成对象跨作用域使用或内存泄漏的条件下,更改所述作用域边界。

9.一种非瞬时性计算机可读存储介质,其上存储有计算机可读指令,当所述计算机可读指令被处理器执行时,使得所述处理器执行如权利要求1-8中任一项所述的方法。

10.一种计算设备,其特征在于,包括:

...

【技术特征摘要】

1.一种用于编译优化的方法,适于通过处理器执行,其特征在于,所述方法包括:

2.根据权利要求1所述的方法,其特征在于,

3.根据权利要求1所述的方法,其特征在于,

4.根据权利要求1所述的方法,其特征在于,得到所述作用域边界后,基于所述作用域边界插入析构函数,包括:

5.根据权利要求3所述的方法,其特征在于,得到所述作用域边界后,基于所述作用域边界插入析构函数,包括:

6.根据权利要求1所述的方法,其特征在于,得到所述作用域边界后,基于所述作用域边界插入析构函数,包括:

7.根...

【专利技术属性】
技术研发人员:王聪聪熊超牛昕宇
申请(专利权)人:山东产研鲲云人工智能研究院有限公司
类型:发明
国别省市:

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

1