[发明专利]一种类型转化方法、装置、设备及存储介质在审
申请号: | 202210405946.0 | 申请日: | 2022-04-18 |
公开(公告)号: | CN114756240A | 公开(公告)日: | 2022-07-15 |
发明(设计)人: | 武鑫;张树威 | 申请(专利权)人: | 北京字节跳动网络技术有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41 |
代理公司: | 北京开阳星知识产权代理有限公司 11710 | 代理人: | 王雪 |
地址: | 100041 北京市石景山区*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 类型 转化 方法 装置 设备 存储 介质 | ||
本公开提供了一种类型转化方法、装置、设备及存储介质,所述方法包括:确定待转化变量和目标转化变量;其中,待转化变量和目标转化变量均属于结构体类型,确定待转化变量和目标转化变量的内存布局是否一致,如果确定待转化变量和目标转化变量的内存布局一致,则构建目标转化函数;其中,目标转化函数用于将待转化变量的内存地址赋给目标转化变量。本公开实施例通过创建目标转化函数,实现复杂结构体类型转化,能够降低系统性能损耗,另外,本公开实施例通过对待转化变量和目标转化变量的内存布局的一致性判断,确保了类型转化的合法性。
技术领域
本公开涉及数据处理领域,尤其涉及一种类型转化方法、装置、设备及存储介质。
背景技术
golang也称go语言,是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,在编译过程中,无法进行复杂结构体(如结构体内嵌套有其他结构体的结构体类型)的转化。
相关技术中,通常采用深拷贝或序列化/反序列化来实现复杂结构体转化,然而,在编译过程中,如果采用上述技术进行复杂结构体转化可能存在大量的内存复制,导致系统性能损耗较大。
发明内容
为了解决上述技术问题,本公开实施例提供了一种类型转化方法。
第一方面,本公开提供了一种类型转化方法,所述方法包括:
确定待转化变量和目标转化变量;其中,所述待转化变量和所述目标转化变量均属于结构体类型;
确定所述待转化变量和所述目标转化变量的内存布局是否一致;
如果确定所述待转化变量和所述目标转化变量的内存布局一致,则构建目标转化函数;其中,所述目标转化函数用于将所述待转化变量的内存地址赋给所述目标转化变量。
一种可选的实施方式中,所述目标转化函数的入参类型为所述待转化变量的类型,所述目标转化函数的出参类型为所述目标转化变量的类型。
一种可选的实施方式中,所述构建目标转化函数之后,还包括:
当检测到第一代码块中存在所述待转化变量时,将所述待转化变量输入至所述目标转化函数,由所述目标转化函数将所述第一代码块中的所述待转化变量转化为所述目标转化变量;其中,所述第一代码块中的所述目标转化变量的内存地址指向所述待转化变量的内存地址。
一种可选的实施方式中,所述确定所述待转化变量和所述目标转化变量的内存布局是否一致,包括:
确定所述待转化变量和所述目标转化变量的数据结构中分别包括的字段的字段类型以及各字段类型之间的顺序是否相同。
一种可选的实施方式中,所述确定所述待转化变量和所述目标转化变量的数据结构中分别包括的字段的字段类型以及各字段类型之间的顺序是否相同,包括:
确定所述待转化变量的数据结构中的第一字段;其中,所述第一字段属于所述待转化变量的数据结构中的任意一个字段;
确定所述目标转化变量的数据结构中与所述第一字段处于对应位置的第二字段;
确定所述第一字段与所述第二字段的字段类型是否相同。
一种可选的实施方式中,所述确定待转化变量和目标转化变量之后,还包括:
将所述待转化变量和所述目标转化变量分别对应的类型存储于预设类型列表中;
相应的,所述确定所述第一字段与所述第二字段的字段类型是否相同之后,还包括:
如果确定所述第一字段与所述第二字段的字段类型不相同,则确定所述第一字段与所述第二字段的字段类型是否存在于所述预设类型列表;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京字节跳动网络技术有限公司,未经北京字节跳动网络技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210405946.0/2.html,转载请声明来源钻瓜专利网。