[发明专利]编译链接优化方法有效
申请号: | 201711294532.0 | 申请日: | 2017-12-08 |
公开(公告)号: | CN109918074B | 公开(公告)日: | 2022-09-27 |
发明(设计)人: | 孟杰;薛皓琳;马瑶瑶;卢彦;杨建生;张蓓;方平;冯艳红;穆鹤林;程毅轩;杨晓璇;吴昆鹏;李洪彬;申利飞 | 申请(专利权)人: | 中标软件有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F9/445;G06F16/901 |
代理公司: | 北京汇智英财专利代理事务所(普通合伙) 11301 | 代理人: | 郑玉洁 |
地址: | 200030 上海市徐汇*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 编译 链接 优化 方法 | ||
本发明涉及一种编译链接优化方法,其利用GNU开源编译链接工具BINUTILS的链接器LD的地址空间分配功能、符号决议功能以及重定位功能,对链接器的链接功能进行优化,并且,优化的功能包括符号表建立功能、查找功能以及链接过程中的查询功能。本发明提供的编译链接优化方法,克服了编译链接速度慢的缺陷,可降低链接时内存占用率,从而达到提升编译链接速度、节省时间成本、提高生产效率的目的。
技术领域
本发明涉及计算机软件程序运行技术领域,具体涉及一种编译链接优化方法。
背景技术
GNU工具链在Linux系统中的作用重大,编译链接占有重要比例。近些年,Linux系统迅速发展,随着计算机技术的不断发展,越来越多的个人和企业开始大量使用Linux系统,各种应用程序的种类不断增加,程序功能不断发生变化,变的愈加多样和复杂,这样的现象导致了程序代码量的急剧增加和模块的增加,同时也给程序的编译链接带来了极大的负担。编译集成过程中,模块的增加导致了二进制目标文件的增加,直接导致需要链接的符号大量增加,这样的数量级将会占用大量系统资源,严重拖慢系统的运行速度,所以将引入一种大数据的查询处理方式,以解决链接带来的问题。
原有的链接器使用了hash算法。hash算法就是将任一给定长度的数据(字符或数值等)通过给定函数映射为较短的、固定长度的数值,这个数值被称为hash值,这个数值便作为索引。hash表是通过给定的hash函数H(key)和处理冲突方法将一组关键字映射到一个已申请好的内存空间上,H(key)作为给定关键字在内存空间中的存储位置,这部分内存空间被称为hash表或散列,所得存储位置称为hash地址或散列地址。作为线性数据结构与表格和队列等相比,hash表无疑是查找速度比较快的一种。
整个链接过程中,符号表的建立、查找部分最为耗时,主要在于对符号表的建立、查找定位方面的消耗,数量稍小一点的目标文件无法察觉到这方面的消耗,但是如果面临上百个目标文件的链接,而每个目标文件又包括上百个(不止)需要链接的符号时,这样的数量级将会暴露龙芯平台硬件方面的不足。如果在这样的数量级或更高的数量级下继续使用链接器现有的hash算法,将会暴露hash算法的重要缺陷,就是空间效率低下,也就是说当在更高数量级的情况下,将会产生hash冲突,为解决hash冲突,就要开拓更多的内存;链接器现在使用的hash算法将占用更大的内存,在此期间对系统速度影响非常大,极易导致系统卡顿,链接导致的系统资源被大量占用对系统的影响已经不容忽视。
发明内容
为解决现有技术存在的不足,本发明提供了一种编译链接优化方法,利用GNU开源编译链接工具BINUTILS的链接器LD的地址空间分配功能、符号决议功能以及重定位功能,对链接器的链接功能进行优化,并且,优化的功能包括符号表建立功能、查找功能以及链接过程中的查询功能。
其中,所述符号表建立功能的优化为创建GL_KV符号表。
其中,符号表建立功能的优化中,通过下述步骤创建GL_KV符号表:
步骤S1:分别收集GNU库符号和基本图形库符号;
步骤S2:将步骤S1中收集的符号的符号名输入布隆过滤器;
步骤S3:将布隆过滤器的输出作为索引算法的输入,确定符号在符号表中的位置;
步骤S4:将符号信息写入符号表。
其中,还包括:
步骤S5:如果经索引算法计算后发现有重复,则另填一张表存放数据,是否重复由GL_KV_sym-rep-sym_r确定;
所述步骤S3中,索引算法为Hash索引算法;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中标软件有限公司,未经中标软件有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711294532.0/2.html,转载请声明来源钻瓜专利网。