CN117453548A - 代码模块信息确定方法、装置、计算机设备和存储介质 - Google Patents

代码模块信息确定方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN117453548A
CN117453548A CN202311407161.8A CN202311407161A CN117453548A CN 117453548 A CN117453548 A CN 117453548A CN 202311407161 A CN202311407161 A CN 202311407161A CN 117453548 A CN117453548 A CN 117453548A
Authority
CN
China
Prior art keywords
code module
file
memory
code
module
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311407161.8A
Other languages
English (en)
Inventor
杨佳龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hexin Technology Co ltd
Shanghai Hexin Digital Technology Co ltd
Original Assignee
Hexin Technology Co ltd
Shanghai Hexin Digital Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hexin Technology Co ltd, Shanghai Hexin Digital Technology Co ltd filed Critical Hexin Technology Co ltd
Priority to CN202311407161.8A priority Critical patent/CN117453548A/zh
Publication of CN117453548A publication Critical patent/CN117453548A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3616Software analysis for verifying properties of programs using software metrics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本申请涉及一种代码模块信息确定方法、装置、计算机设备、存储介质和计算机程序产品。该方法包括:根据代码模块的源文件,生成代码模块的目标对象文件和链接脚本文件;链接脚本文件中源文件前后标记有起始位置标识和结束位置标识,链接脚本文件用于描述源文件在内存中的存储顺序;根据链接脚本文件,对目标对象文件进行链接处理,得到代码模块的可执行文件;根据可执行文件,确定代码模块的模块信息;模块信息中至少包括代码模块的位置和体积;位置通过起始位置标识在内存中所处起始位置和结束位置标识在内存中所处结束位置表示;体积通过结束位置和起始位置之间的位置差异对应的占用内存空间表示。采用本方法,能够提高代码模块信息确定效率。

Description

代码模块信息确定方法、装置、计算机设备和存储介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种代码模块信息确定方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术
在基于编译型语言搭建的嵌入式项目中,存在许多单独的代码模块;为了便于嵌入式项目的推进,需要确定这些代码模块的模块信息。
传统技术中,在确定代码模块的模块信息时,一般是通过人工分析代码模块的相关数据,来确定代码模块的位置、体积等。但是,通过人工分析确定代码模块信息,过程比较繁琐,导致代码模块信息的确定效率较低。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高代码模块信息的确定效率的代码模块信息确定方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种代码模块信息确定方法,包括:
根据代码模块的源文件,生成所述代码模块的目标对象文件和链接脚本文件;所述链接脚本文件中所述源文件前后标记有起始位置标识和结束位置标识,所述链接脚本文件用于描述所述源文件在内存中的存储顺序;
根据所述链接脚本文件,对所述目标对象文件进行链接处理,得到所述代码模块的可执行文件;
根据所述可执行文件,确定所述代码模块的模块信息;所述模块信息中至少包括所述代码模块的位置和体积;所述位置通过所述起始位置标识在所述内存中所处起始位置和所述结束位置标识在所述内存中所处结束位置表示;所述体积通过所述结束位置和所述起始位置之间的位置差异对应的占用内存空间表示。
在其中一个实施例中,所述根据所述可执行文件,确定所述代码模块的模块信息,包括:
在所述可执行文件执行的过程中,调用与所述代码模块对应的回调文件,获取所述起始位置、所述结束位置和所述位置差异;
根据所述起始位置、所述结束位置和所述位置差异,输出所述代码模块的位置和体积。
在其中一个实施例中,在所述可执行文件执行的过程中,调用与所述代码模块对应的回调文件,获取所述起始位置、所述结束位置和所述位置差异之前,还包括:
获取回调文件模板;
将所述代码模块的源文件的所述起始位置标识和所述结束位置标识,添加至所述回调文件模板中的对应位置,得到与所述代码模块对应的回调文件。
在其中一个实施例中,所述根据所述可执行文件,确定所述代码模块的模块信息,还包括:
在所述可执行文件未执行的过程中,对所述可执行文件进行解析,得到所述起始位置和所述结束位置;
根据所述起始位置和所述结束位置,确定所述代码模块的位置,以及确定所述位置差异;
确定所述位置差异对应的占用内存空间,作为所述代码模块的体积。
在其中一个实施例中,所述根据所述可执行文件,确定所述代码模块的模块信息,还包括:
在所述可执行文件未执行的过程中,获取所述起始位置、所述结束位置和所述位置差异;
在所述可执行文件执行的过程中,调用与所述代码模块对应的回调文件,基于所述起始位置、所述结束位置和所述位置差异,输出所述代码模块的位置和体积。
在其中一个实施例中,所述链接脚本文件通过下述方式得到:
在链接脚本文件模板中,配置所述源文件在内存中的存储顺序,得到初始链接脚本文件;
在所述初始链接脚本文件中,在所述源文件前后添加所述起始位置标识和所述结束位置标识,得到所述链接脚本文件。
在其中一个实施例中,在根据所述可执行文件,确定所述代码模块的模块信息之后,还包括:
从所述代码模块中,识别出对应的体积大于预设体积的代码模块,作为存在问题的目标代码模块;
根据所述目标代码模块的位置,在所述内存中定位到所述目标代码模块。
在其中一个实施例中,在根据所述可执行文件,确定所述代码模块的模块信息之后,还包括:
根据所述代码模块的体积,查询体积与工作量之间的对应关系,得到所述代码模块的工作量;
或者,
根据所述代码模块的位置,对对应的访问频次大于预设频次的代码模块进行分散处理。
第二方面,本申请还提供了一种代码模块信息确定装置,包括:
文件生成模块,用于根据代码模块的源文件,生成所述代码模块的目标对象文件和链接脚本文件;所述链接脚本文件中所述源文件前后标记有起始位置标识和结束位置标识,所述链接脚本文件用于描述所述源文件在内存中的存储顺序;
链接处理模块,用于根据所述链接脚本文件,对所述目标对象文件进行链接处理,得到所述代码模块的可执行文件;
信息确定模块,用于根据所述可执行文件,确定所述代码模块的模块信息;所述模块信息中至少包括所述代码模块的位置和体积;所述位置通过所述起始位置标识在所述内存中所处起始位置和所述结束位置标识在所述内存中所处结束位置表示;所述体积通过所述结束位置和所述起始位置之间的位置差异对应的占用内存空间表示。
第三方面,本申请还提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
根据代码模块的源文件,生成所述代码模块的目标对象文件和链接脚本文件;所述链接脚本文件中所述源文件前后标记有起始位置标识和结束位置标识,所述链接脚本文件用于描述所述源文件在内存中的存储顺序;
根据所述链接脚本文件,对所述目标对象文件进行链接处理,得到所述代码模块的可执行文件;
根据所述可执行文件,确定所述代码模块的模块信息;所述模块信息中至少包括所述代码模块的位置和体积;所述位置通过所述起始位置标识在所述内存中所处起始位置和所述结束位置标识在所述内存中所处结束位置表示;所述体积通过所述结束位置和所述起始位置之间的位置差异对应的占用内存空间表示。
第四方面,本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
根据代码模块的源文件,生成所述代码模块的目标对象文件和链接脚本文件;所述链接脚本文件中所述源文件前后标记有起始位置标识和结束位置标识,所述链接脚本文件用于描述所述源文件在内存中的存储顺序;
根据所述链接脚本文件,对所述目标对象文件进行链接处理,得到所述代码模块的可执行文件;
根据所述可执行文件,确定所述代码模块的模块信息;所述模块信息中至少包括所述代码模块的位置和体积;所述位置通过所述起始位置标识在所述内存中所处起始位置和所述结束位置标识在所述内存中所处结束位置表示;所述体积通过所述结束位置和所述起始位置之间的位置差异对应的占用内存空间表示。
第五方面,本申请还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
根据代码模块的源文件,生成所述代码模块的目标对象文件和链接脚本文件;所述链接脚本文件中所述源文件前后标记有起始位置标识和结束位置标识,所述链接脚本文件用于描述所述源文件在内存中的存储顺序;
根据所述链接脚本文件,对所述目标对象文件进行链接处理,得到所述代码模块的可执行文件;
根据所述可执行文件,确定所述代码模块的模块信息;所述模块信息中至少包括所述代码模块的位置和体积;所述位置通过所述起始位置标识在所述内存中所处起始位置和所述结束位置标识在所述内存中所处结束位置表示;所述体积通过所述结束位置和所述起始位置之间的位置差异对应的占用内存空间表示。
上述代码模块信息确定方法、装置、计算机设备、存储介质和计算机程序产品,首先根据代码模块的源文件,生成代码模块的目标对象文件和链接脚本文件;链接脚本文件中源文件前后标记有起始位置标识和结束位置标识,链接脚本文件用于描述源文件在内存中的存储顺序;然后根据链接脚本文件,对目标对象文件进行链接处理,得到代码模块的可执行文件;最后根据可执行文件,确定代码模块的模块信息;模块信息中至少包括代码模块的位置和体积;位置通过起始位置标识在内存中所处起始位置和结束位置标识在内存中所处结束位置表示;体积通过结束位置和起始位置之间的位置差异对应的占用内存空间表示。这样,在代码模块的链接脚本文件中源文件前后标记起始位置标识和结束位置标识,并配置源文件在内存中的存储顺序,使得在根据链接脚本文件链接处理得到的可执行文件中,可以根据起始位置标识在内存中所处起始位置和结束位置标识在内存中所处结束位置,自动确定代码模块的位置,以及根据结束位置和起始位置之间的位置差异对应的占用内存空间,自动确定代码模块的体积,即整个过程中只需要输入代码模块的源文件,即可自动确定出代码模块信息,无需通过人工分析,从而简化了代码模块信息的确定过程,进而提高了代码模块信息的确定效率。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一个实施例中代码模块信息确定方法的流程示意图;
图2为一个实施例中确定代码模块的模块信息的步骤的流程示意图;
图3为另一个实施例中确定代码模块的模块信息的步骤的流程示意图;
图4为一个实施例中生成代码模块的链接脚本文件的步骤的流程示意图;
图5为另一个实施例中代码模块信息确定方法的流程示意图;
图6为一个实施例中编译型语言搭建的嵌入式项目中代码模块位置和体积的统计方法的流程示意图;
图7为一个实施例中代码模块信息确定装置的结构框图;
图8为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个示例性的实施例中,如图1所示,提供了一种代码模块信息确定方法,本实施例以该方法应用于终端进行举例说明;可以理解的是,该方法也可以应用于服务器,还可以应用于包括终端和服务器的系统,并通过终端和服务器之间的交互实现。其中,终端可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑等;服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。本实施例中,该方法包括以下步骤S101至步骤S103。其中:
步骤S101,根据代码模块的源文件,生成代码模块的目标对象文件和链接脚本文件;链接脚本文件中源文件前后标记有起始位置标识和结束位置标识,链接脚本文件用于描述源文件在内存中的存储顺序。
其中,代码模块是指通过代码集成的模块,具体是指基于编译型语言搭建的嵌入式项目中的代码模块,比如UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)、GPIO(General-Purpose Input/Output,通用型之输入输出)、Timer(定时器)等。
需要说明的是,在嵌入式项目中,对代码模块的体积要求较为严格,需要在尽可能的情况下降低存储器体积,进而减小成本;因此,在这种对代码模块的体积极为敏感的场景下,需要时刻关注各个代码模块的体积,这样有助于嵌入式项目稳定推进。
其中,源文件是指代码模块的源代码所组成的文件;一个代码模块可以包括多个源文件,比如代码模块A包括源文件a1、源文件a2和源文件a3。
其中,目标对象文件是指目标代码所组成的文件,目标代码是指源文件中的源代码经过编译器产生的能够被计算机直接识别的二进制代码。在实际场景中,通过编译器对源文件进行编译处理,可以生成目标对象文件;而且,一个源文件,对应一个目标对象文件。
需要说明的是,源文件经过编译之后,可以分为指令和数据,故目标对象文件中包括源文件对应的指令和数据。
其中,链接脚本文件是指用于指导目标对象文件到可执行文件的链接行为的辅助文件。需要说明的是,目标对象文件作为中间过渡文件,已经具有了可执行文件的大部分内容,但需要经过链接脚本文件链接处理之后才是一个后缀为.exe的可执行文件。
其中,在链接脚本文件中,在每个代码模块的源文件前面添加有起始位置标识,比如A_start;在每个代码模块的源文件后面添加有结束位置标识,比如A_end。而且,每个代码模块,都对应有一个起始位置标识和一个结束位置标识,比如A_start、代码模块A的源文件、A_end;B_start、代码模块B的源文件、B_end。
其中,起始位置标识是指表征代码模块在内存中的起始位置的标识符,比如A_start、B_start、C_start等;结束位置标识是指表征代码模块在内存中的结束位置的标识符,比如A_end、B_end、C_end等。
其中,在链接脚本文件中,还配置有源文件在内存中的存储顺序,比如哪些代码模块的源文件(对应的指令或者数据)排在前面,哪些代码模块的源文件(对应的指令或者数据)排在后面。举例说明,在链接脚本文件中,若显示“A_start、代码模块A的源文件a1、源文件a2和源文件a3、A_end、A_start、代码模块B的源文件b1、源文件b2和源文件b3、B_end”,表示代码模块A的源文件,排列在代码模块B的源文件的前面,且针对代码模块A,源文件a1排列在源文件a2的前面,源文件a2排列在源文件a3的前面;针对代码模块B,源文件b1排列在源文件b2的前面,源文件b2排列在源文件b3的前面。在实际场景中,链接脚本文件被链接器用来指导代码模块的源文件的指令和数据,在内存中的绝对位置(即指定放在内存中的哪个字节处)和相对位置(即指定不同源文件的前后顺序)。
示例性地,终端响应于代码模块信息查询请求,从源文件库中,获取基于编译型语言搭建的嵌入式项目中的代码模块的源文件;接着利用编译器,对代码模块的源文件进行编译处理,得到代码模块的目标对象文件;同时,利用链接脚本文件生成指令,配置代码模块的源文件在内存中的存储顺序,以及在每个代码模块的源文件的前后添加起始位置标识和结束位置标识,从而得到代码模块的链接脚本文件。
举例说明,终端对代码模块的源文件进行预编译、编译和汇编,得到代码模块的目标对象文件;利用第一bash脚本文件,基于代码模块的源文件,辅助生成代码模块的链接脚本文件。其中,第一bash脚本文件是一种用于辅助生成链接脚本文件的脚本文件。
步骤S102,根据链接脚本文件,对目标对象文件进行链接处理,得到代码模块的可执行文件。
其中,对目标对象文件进行链接处理,是指将多个目标对象文件与库中的某些文件连在一起,生成一个后缀为.exe的可执行文件。
需要说明的是,在链接处理过程中,终端通过链接器为目标对象文件分配地址和空间,即为源文件对应的指令和数据分配地址和空间,使得代码模块的源文件对应的指令和数据(包括起始位置标识和结束位置标识),按照链接脚本文件中配置的存储顺序,依次存储至内存中,使得后续根据起始位置标识在内存中所处起始位置和结束位置标识在内存中所处结束位置,即可确定代码模块在内存中的位置。
其中,所有代码模块的目标对象文件,组成一个可执行文件。在可执行文件中,代码模块的源文件(包括指令和数据),在内存中都有相应的位置。而且,代码模块的起始位置标识和结束位置标识,在内存中也都有相应的位置。
其中,链接脚本文件中还包括在内存中的起始位置,比如0x4000000,即指明第一个代码模块的源文件的起始位置标识在内存中的起始位置,使得代码模块的源文件对应的指令和数据(包括起始位置标识和结束位置标识),从该起始位置开始,按照链接脚本文件中配置的存储顺序,依次存储至内存中,比如从该起始位置开始,按照该存储顺序,依次将各个代码模块的源文件对应的指令(包括起始位置标识和结束位置标识)存储至内存中,接着,继续按照该存储顺序,依次将各个代码模块的源文件对应的数据(包括起始位置标识和结束位置标识)存储至内存中。
示例性地,终端根据代码模块的链接脚本文件,对代码模块的目标对象文件进行链接处理,使得目标对象文件与库中的某些文件(比如与目标对象文件关联的文件)连在一起,同时使得代码模块的源文件对应的指令和数据(包括起始位置标识和结束位置标识),从链接脚本文件中配置的在内存中的起始位置(比如0x4000000)开始,按照链接脚本文件中配置的存储顺序,依次存储至内存中,最终得到一个可执行文件,作为代码模块的可执行文件。
举例说明,假设有100个源文件,终端通过链接脚本文件,确定了这100个源文件的指令的起始位置以及存储顺序;之后,这100个源文件的指令就会按照该存储顺序,从该起始位置开始,依次存储至内存中,最终得到代码模块的可执行文件。
步骤S103,根据可执行文件,确定代码模块的模块信息;模块信息中至少包括代码模块的位置和体积。
其中,位置通过起始位置标识在内存中所处起始位置和结束位置标识在内存中所处结束位置表示;体积通过结束位置和起始位置之间的位置差异对应的占用内存空间表示。
其中,起始位置是指起始位置标识在内存中所处的位置,比如0x4000000。结束位置是指结束位置标识在内存中所处的位置,比如0x4000200。
其中,代码模块的位置是指代码模块的源文件在内存中所处的位置,可以通过该代码模块对应的起始位置标识在内存中所处的起始位置,以及该代码模块对应的结束位置标识在内存中所处的结束位置确定,即代码模块的位置为:起始位置~结束位置,比如代码模块A的位置为:0x4000000~0x4000200。
其中,代码模块的体积是指代码模块的源文件的占用内存空间,且代码模块的源文件的占用内存空间,与代码模块的体积存在一一对应的关系,比如代码模块的源文件的占用内存空间为0x200(16进制),表示代码模块的体积为0x200(16进制),也可以表示为512bytes(10进制)。
其中,位置差异是指结束位置与起始位置之间的差,比如结束位置为0x4000200,起始位置为0x4000000,则位置差异为0x200。
需要说明的是,本申请将内存假设成一个长方体条,且该长方体条的宽和厚均为1byte,那么位置差异可以表示代码模块的源文件占据的长度,说明代码模块的源文件的占用内存空间,等于位置差异对应的占用内存空间,即位置差异×1×1。也就是说,在长方体条的宽和厚均为1byte的情况下,位置差异对应的占用内存空间,等于该位置差异。
示例性地,终端采用相应的代码模块信息统计方法,基于可执行文件,确定出代码模块的起始位置标识在内存中所处起始位置和结束位置标识在内存中所处结束位置,以及结束位置和起始位置之间的位置差异,然后根据起始位置和结束位置,确定代码模块的位置,以及根据位置差异对应的占用内存空间,确定代码模块的体积,比如代码模块A的起始位置为0x4000000,结束位置为0x4000200,位置差异为0x200,则代码模块A的位置为:0x4000000~0x4000200,代码模块A的体积为0x200(16进制),也可以表示为512bytes(10进制)。
举例说明,终端根据最终想要展示的方式,将代码模块信息统计方法分为三种,分别是运行时动态计算方法、运行时半动态计算方法、静态计算方法,并从中选择一种计算方法,计算出代码模块的位置和体积。其中,运行时动态计算方法和运行时半动态计算方法都可以用回调函数进行打印输出,即可以打印输出各个代码模块的位置和体积;好处是可以动态回调,作为一个项目特色进行展示,缺点是会占用一部分体积,而且只能在每次运行时才能看到。静态计算方法可用于在编译链接之后,静态地展示各个代码模块的位置和体积;好处是每次编译之后都可立即看到各个代码模块的位置和体积,及时发现问题,同时可以侧面注意到都适用到了哪些代码模块,坏处是无法在代码中动态调用,不能作为一个项目特色进行展示,只能是一个辅助开发的功能。
上述代码模块信息确定方法中,首先根据代码模块的源文件,生成代码模块的目标对象文件和链接脚本文件;链接脚本文件中源文件前后标记有起始位置标识和结束位置标识,链接脚本文件用于描述源文件在内存中的存储顺序;然后根据链接脚本文件,对目标对象文件进行链接处理,得到代码模块的可执行文件;最后根据可执行文件,确定代码模块的模块信息;模块信息中至少包括代码模块的位置和体积;位置通过起始位置标识在内存中所处起始位置和结束位置标识在内存中所处结束位置表示;体积通过结束位置和起始位置之间的位置差异对应的占用内存空间表示。这样,在代码模块的链接脚本文件中源文件前后标记起始位置标识和结束位置标识,并配置源文件在内存中的存储顺序,使得在根据链接脚本文件链接处理得到的可执行文件中,可以根据起始位置标识在内存中所处起始位置和结束位置标识在内存中所处结束位置,自动确定代码模块的位置,以及根据结束位置和起始位置之间的位置差异对应的占用内存空间,自动确定代码模块的体积,即整个过程中只需要输入代码模块的源文件,即可自动确定出代码模块信息,无需通过人工分析,从而简化了代码模块信息的确定过程,进而提高了代码模块信息的确定效率。
在一个示例性的实施例中,如图2所示,上述步骤S103,根据可执行文件,确定代码模块的模块信息,具体包括以下步骤S201至步骤S202。其中:
步骤S201,在可执行文件执行的过程中,调用与代码模块对应的回调文件,获取起始位置、结束位置和位置差异。
步骤S202,根据起始位置、结束位置和位置差异,输出代码模块的位置和体积。
其中,回调文件是一种用于在可执行文件执行的过程中,打印输出代码模块的位置和体积的文件,具体由回调函数构成。
需要说明的是,本实施例对应的方法是运行时动态计算方法,该方法能够在可执行文件执行的过程中,随时主动调用回调文件,进行代码模块的位置和体积的动态打印查看。
示例性地,终端预先根据回调文件生成指令,生成与代码模块对应的回调文件;在可执行文件执行的过程中,终端调用预先生成的与代码模块对应的回调文件,获取该代码模块的起始位置标识在内存中所处起始位置、该代码模块的结束位置标识在内存中所处结束位置,以及结束位置和起始位置之间的位置差异,并根据起始位置、结束位置和位置差异,打印输出代码模块的位置和体积,比如代码模块A:起始位置~结束位置;体积:位置差异。
举例说明,在代码模块A的可执行文件执行的过程中,终端调用与代码模块A对应的回调文件,并根据代码模块A的起始位置标识A_start和结束位置标识A_end,获取到代码模块A的起始位置为0x4000000,结束位置为0x4000200,位置差异为0x200,并根据获取的这些信息,打印输出“代码模块A:0x4000000~0x4000200;size:512”。
在本实施例中,在可执行文件执行的过程中,调用与代码模块对应的回调文件,获取起始位置、结束位置和位置差异,并根据获取到的起始位置、结束位置和位置差异,输出代码模块的位置和体积,实现了在可执行文件执行的过程中,通过与代码模块对应的回调文件,动态输出代码模块的位置和体积的目的,有利于动态展示代码模块的位置和体积。
在一个示例性的实施例中,上述步骤S201,在可执行文件执行的过程中,调用与代码模块对应的回调文件,获取起始位置、结束位置和位置差异之前,还包括如下内容:获取回调文件模板;将代码模块的源文件的起始位置标识和结束位置标识,添加至回调文件模板中的对应位置,得到与代码模块对应的回调文件。
其中,回调文件模板是一种用于生成回调文件的文件模板,比如回调函数模板。
示例性地,终端从本地数据库中,获取预先生成的回调文件模板;然后获取代码模块的源文件的起始位置标识和结束位置标识,并将代码模块的源文件的起始位置标识,添加至回调文件模板中与起始位置标识对应的位置中,以及将代码模块的源文件的结束位置标识,添加至回调文件模板中与结束位置标识对应的位置中,得到与代码模块对应的回调文件;比如将A_start和A_end添加至回调文件模板中的对应位置。
举例说明,终端获取第二bash脚本文件,以及代码模块的模块符号,比如A、B、C等,并利用第二bash脚本文件,基于代码模块的模块符号,生成与代码模块对应的回调文件。其中,第二bash脚本文件是一种用于辅助生成回调文件的脚本文件。
在本实施例中,将代码模块的源文件的起始位置标识和结束位置标识,添加至获取到的回调文件模板中的对应位置,得到与代码模块对应的回调文件;这样,通过借助回调文件模板,生成回调文件,有利于提高回调文件的生成效率,同时便于后续调用生成的回调文件,动态输出代码模块的位置和体积。
在一个示例性的实施例中,如图3所示,上述步骤S103,根据可执行文件,确定代码模块的模块信息,具体包括以下步骤S301至步骤S302。其中:
步骤S301,在可执行文件未执行的过程中,对可执行文件进行解析,得到起始位置和结束位置。
步骤S302,根据起始位置和结束位置,确定代码模块的位置,以及确定位置差异。
步骤S303,确定位置差异对应的占用内存空间,作为代码模块的体积。
需要说明的是,本实施例对应的方法为静态计算方法,该方法用于在编译链接之后静态地展示各个代码模块的位置和体积,有利于及时发现问题;而且,该方法完全是本地编译计算行为,不会编译进最终的二进制文件,只能本地计算和本地打印查看。
示例性地,在可执行文件未执行的过程中,终端利用文件解析工具,对可执行文件进行解析,得到起始位置标识和起始位置标识在内存中所处的位置,作为起始位置,以及得到结束位置标识和结束位置标识在内存中所处的位置,作为结束位置;然后,根据起始位置和结束位置,确定代码模块的位置,即代码模块的位置:起始位置~结束位置,并获取结束位置与起始位置之间的差,作为位置差异;最后确定位置差异对应的占用内存空间,作为该代码模块的占用内存空间,并将该代码模块的占用内存空间,确认为该代码模块的体积,即代码模块的体积:位置差异(结束位置-起始位置)。
举例说明,在可执行文件未执行的过程中,终端利用工具,对可执行文件进行解析,得到代码模块A的起始位置标识A_start及其对应的值:0x4000000,以及代码模块A的结束位置标识A_end及其对应的值:0x4000200,进而根据A_start及其对应的值,以及A_end及其对应的值,确定出代码模块A的位置为:0x4000000~0x4000200,体积为:512bytes。
在本实施例中,在可执行文件未执行的过程中,对可执行文件进行解析,得到起始位置和结束位置,进而根据起始位置和结束位置,确定出代码模块的位置和体积;这样,实现了在得到可执行文件之后,静态地展示代码模块的位置和体积的目的,有利于在每次编译之后,立即查看代码模块的位置和体积,便于及时发现问题。
在一个示例性的实施例中,上述步骤S103,根据可执行文件,确定代码模块的模块信息,还可以包括以下内容:在可执行文件未执行的过程中,获取起始位置、结束位置和位置差异;在可执行文件执行的过程中,调用与代码模块对应的回调文件,基于起始位置、结束位置和位置差异,输出代码模块的位置和体积。
需要说明的是,本实施例对应的方法为运行时半动态计算方法,该方法将计算部分放在在链接前,因此,可以在链接后,运行前,进行本地打印显示;但仍然编译进可执行文件,也可以在可执行文件执行的过程中,动态调用回调函数进行打印显示。也就是说,该方法将计算部分放在了本地,本地计算好之后,再将结果编译进项目,项目二进制文件里面不含有计算,只有打印部分。
示例性地,在可执行文件未执行的过程中,终端获取代码模块的起始位置标识在内存中所处的位置,作为起始位置,以及获取代码模块的结束位置标识在内存中所处的位置,作为结束位置,并统计结束位置与起始位置之间的位置差异;这个时候,终端也可以在本地展示代码模块的位置和体积,比如代码模块A:起始位置~结束位置;体积:位置差异。进一步地,在可执行文件执行的过程中,终端调用与代码模块对应的回调文件,基于起始位置、结束位置和位置差异,打印输出代码模块的位置和体积,比如代码模块A:起始位置~结束位置;体积:位置差异。
举例说明,在代码模块A的可执行文件未执行的过程中,终端根据代码模块A的起始位置标识A_start和结束位置标识A_end,获取到代码模块A的起始位置为0x4000000,结束位置为0x4000200,位置差异为0x200;接着,在代码模块A的可执行文件执行的过程中,终端调用与代码模块A对应的回调文件,基于获取到的信息,打印输出“代码模块A:0x4000000~0x4000200;size:512”。
在本实施例中,在可执行文件未执行的过程中,获取起始位置、结束位置和位置差异;在可执行文件执行的过程中,调用与代码模块对应的回调文件,基于起始位置、结束位置和位置差异,输出代码模块的位置和体积;这样,将计算部分和输出部分分隔开,实现了在计算之后,静态展示代码模块的位置和体积的目的,有利于及时查看代码模块的位置和体积,便于及时发现问题;同时,实现了在可执行文件执行过程中,动态输出代码模块的位置和体积的目的,有利于动态展示代码模块的位置和体积。
在一个示例性的实施例中,如图4所示,上述步骤S101,根据代码模块的源文件,生成代码模块的目标对象文件和链接脚本文件,具体包括以下步骤S401至步骤S402。其中:
步骤S401,在链接脚本文件模板中,配置源文件在内存中的存储顺序,得到初始链接脚本文件。
步骤S402,在初始链接脚本文件中,在源文件前后添加起始位置标识和结束位置标识,得到链接脚本文件。
其中,链接脚本文件模板是一种用于辅助生成链接脚本文件的文件模版。
其中,初始链接脚本文件是指仅配置了源文件在内存中的存储顺序的链接脚本文件。链接脚本文件是指在初始链接脚本文件中,进一步在源文件前后添加起始位置标识和结束位置标识后所得到的文件。
示例性地,终端从数据库中,获取预先生成的链接脚本文件模板,然后在链接脚本文件模板中,配置代码模块的源文件在内存中的存储顺序,得到初始链接脚本文件;比如代码模块A的源文件排在前面,代码模块B的源文件排在后面;最后,在初始链接脚本文件中,在每个代码模块的源文件前后添加起始位置标识和结束位置标识,同时配置最开始的起始位置标识在内存中的起始位置,得到最终的链接脚本文件。比如,在代码模块A的源文件前后添加A_start和A_end,在代码模块B的源文件前后添加B_start和B_end,以及配置A_start在内存中的起始位置为0x4000000。
在本实施例中,在链接脚本文件模板中,配置代码模块的源文件在内存中的存储顺序,以及在代码模块的源文件前后添加起始位置标识和结束位置标识,得到链接脚本文件;这样,借助链接脚本文件模板生成链接脚本文件,有利于提高链接脚本文件的生成效率;同时,按照上述方法生成链接脚本文件,有利于后续基于链接脚本文件链接得到的可执行文件,快速得到代码模块的位置和体积,无需经过人工分析,从而提高了代码模块信息的确定效率。
在一个示例性的实施例中,在根据可执行文件,确定代码模块的模块信息之后,还包括如下内容:从代码模块中,识别出对应的体积大于预设体积的代码模块,作为存在问题的目标代码模块;根据目标代码模块的位置,在内存中定位到目标代码模块。
其中,代码模块的体积大于预设体积,说明该代码模块可能存在错误的数据定义,或者存在冗余代码,进而说明该模块存在问题。
其中,目标代码模块是指存在问题的代码模块,具体是指对应的体积大于预设体积的代码模块。
示例性地,终端从多个代码模块中,识别出对应的体积大于预设体积的代码模块,并将该代码模块确认为存在问题的目标代码模块;接着,从代码模块的位置中,查找出目标代码模块的位置,最后根据目标代码模块的位置,在内存中定位到目标代码模块。进一步地,终端还可以对目标代码模块进行问题诊断,并利用对应的问题修复指令,对目标代码模块进行修复处理。
举例说明,在代码模块A的体积过大时,说明该代码模块可能存在错误的数据定义或者冗余代码,进而说明代码模块A存在问题;此时,终端可以通过当前IP(InternetProtocol,网络之间互连的协议)寄存器的值,确定代码模块A的内存位置,进而快速定位出出现问题的代码模块A。
在本实施例中,根据代码模块的体积,从代码模块中识别出存在问题的目标代码模块;根据目标代码模块的位置,在内存中定位到目标代码模块;这样,实现了快速定位出出现问题的代码模块的目的,有利于及时发现问题。
在一个示例性的实施例中,在根据可执行文件,确定代码模块的模块信息之后,还包括如下内容:根据代码模块的体积,查询体积与工作量之间的对应关系,得到代码模块的工作量;或者,根据代码模块的位置,对对应的访问频次大于预设频次的代码模块进行分散处理。
其中,代码模块的体积与代码模块的工作量存在一一对应的关系,比如代码模块的体积越大,那么代码模块的工作量也越大。
其中,对应的访问频次大于预设频次的代码模块,是指访问频繁的代码模块;这些访问频繁的代码模块,需要在布局上分散开来,避免集中在一起。
示例性地,终端根据代码模块的体积,查询体积与工作量之间的对应关系,得到代码模块的体积对应的工作量,作为该代码模块的工作量。进一步地,终端还可以从代码模块中,筛选出对应的访问频次大于预设频次的代码模块,作为访问频繁的代码模块;并根据代码模块的位置,对筛选出的访问频繁的代码模块进行分散处理。
在本实施例中,根据代码模块的体积,查询体积与工作量之间的对应关系,得到代码模块的工作量,有利于通过代码模块的体积,侧面反映代码模块的工作量大小。同时,根据代码模块的位置,对对应的访问频次大于预设频次的代码模块进行分散处理,有利于将访问频繁的代码模块在布局上分散开来,避免集中在一起。
在一个示例性的实施例中,如图5所示,提供了另一种代码模块信息确定方法,以该方法应用于终端为例进行说明,具体包括以下步骤S501至步骤S507。
其中:
步骤S501,根据代码模块的源文件,生成代码模块的目标对象文件。
步骤S502,在链接脚本文件模板中,配置源文件在内存中的存储顺序,得到初始链接脚本文件;在初始链接脚本文件中,在源文件前后添加起始位置标识和结束位置标识,得到链接脚本文件。
步骤S503,根据链接脚本文件,对目标对象文件进行链接处理,得到代码模块的可执行文件。
其中,在步骤S503之后,分为三个分支,分别是步骤S504至步骤S505、步骤S506至步骤S507、步骤S508至步骤S509。
步骤S504,获取回调文件模板;将代码模块的源文件的起始位置标识和结束位置标识,添加至回调文件模板中的对应位置,得到与代码模块对应的回调文件。
步骤S505,在可执行文件执行的过程中,调用与代码模块对应的回调文件,获取起始位置、结束位置和位置差异;根据起始位置、结束位置和位置差异,输出代码模块的位置和体积。
步骤S506,在可执行文件未执行的过程中,获取起始位置、结束位置和位置差异。
步骤S507,在可执行文件执行的过程中,调用与代码模块对应的回调文件,基于起始位置、结束位置和位置差异,输出代码模块的位置和体积。
步骤S508,在可执行文件未执行的过程中,对可执行文件进行解析,得到起始位置和结束位置。
步骤S509,根据起始位置和结束位置,确定代码模块的位置,以及确定位置差异;确定位置差异对应的占用内存空间,作为代码模块的体积。
上述代码模块信息确定方法中,在代码模块的链接脚本文件中源文件前后标记起始位置标识和结束位置标识,并配置源文件在内存中的存储顺序,使得在根据链接脚本文件链接处理得到的可执行文件中,可以根据起始位置标识在内存中所处起始位置和结束位置标识在内存中所处结束位置,自动确定代码模块的位置,以及根据结束位置和起始位置之间的位置差异对应的占用内存空间,自动确定代码模块的体积,即整个过程中只需要输入代码模块的源文件,即可自动确定出代码模块信息,无需通过人工分析,从而简化了代码模块信息的确定过程,进而提高了代码模块信息的确定效率。
在一个示例性的实施例中,为了更清晰阐明本申请实施例提供的代码模块信息确定方法,以下以一个具体的实施例对该代码模块信息确定方法进行具体说明。在一个实施例中,参考图6,本申请还提供了一种编译型语言搭建的嵌入式项目中代码模块位置和体积的统计方法,终端首先利用编译器对代码模块A的源文件进行编译处理,得到代码模块A的目标对象文件,同时对代码模块B的源文件进行编译处理,得到代码模块B的目标对象文件;接着通过链接器,基于预先生成的链接脚本文件,对代码模块A和B的目标对象文件进行链接处理,得到一个可执行文件;最后,在可执行文件执行的过程中,通过动态调用预先生成的回调文件(动态及半动态时存在此文件),动态打印出代码模块A或B的位置和体积,这种方法称为动态方法。或者,在可执行文件未执行的过程中,通过静态解析可执行文件,得到代码模块A或B的位置和体积,这种方法称为静态方法。接下来,对动态方法和静态方法进行具体介绍。
1、运行时动态计算方法:(1)将所有源文件进行预编译、编译和汇编三个动作,生成目标对象文件;(2)在链接脚本文件中,显示指明每个代码模块的源文件链接的相对位置,并在每个代码模块的源文件旁边插入一个符号,比如A_start、A_end、B_start、B_end;(3)根据符号生成回调函数;(4)在任意处调用此函数,即可打印输出代码模块A或B的位置和体积。
2、静态计算方法:(1)在链接脚本文件中如运动时动态计算方法一样提供符号;在链接完成之后,由于是静态链接的嵌入式软件,因此,可以直接通过工具解析可执行文件,得到符号及其值;(3)根据符号和值,既可得知代码模块的位置和体积;其中,符号和值是一一对应关系,每个符号中存有一个值,而这个值就是当前符号在内存中所处的位置;假设一个符号A_start,其值为0x2000 0000,另一个符号A_end,其值为0x2000 0010,由此可以得知代码模块A的指令或数据在内存中位于0x2000 0000~0x2000 0010之间,这是代码模块A的指令或数据被拷贝到内存中进行运行的位置,0x10就是代码模块A的指令或数据的体积。
上述编译型语言搭建的嵌入式项目中代码模块位置和体积的统计方法,可以达到以下技术效果:(1)有利于提高代码模块信息的确定效率;(2)可以随时了解到代码模块的布局和大小,及时发现问题;(3)实现简单方便,各个步骤均可通过脚本实现自动化部署;(4)通过模块布局,可以合理划分不同热度模块在介质中的位置,延长某些读写次数严重受限介质的寿命;(5)通过模块布局,可以在代码出现问题时,通过IP寄存器快速定位出现问题的模块;(6)通过模块体积,可以估计代码冗余是否严重;(7)通过模块体积,可以从侧面反映各个模块的工作量大小。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的代码模块信息确定方法的代码模块信息确定装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个代码模块信息确定装置实施例中的具体限定可以参见上文中对于代码模块信息确定方法的限定,在此不再赘述。
在一个示例性的实施例中,如图7所示,提供了一种代码模块信息确定装置,包括:文件生成模块710、链接处理模块720和信息确定模块730,其中:
文件生成模块710,用于根据代码模块的源文件,生成代码模块的目标对象文件和链接脚本文件;链接脚本文件中源文件前后标记有起始位置标识和结束位置标识,链接脚本文件用于描述源文件在内存中的存储顺序。
链接处理模块720,用于根据链接脚本文件,对目标对象文件进行链接处理,得到代码模块的可执行文件。
信息确定模块730,用于根据可执行文件,确定代码模块的模块信息;模块信息中至少包括代码模块的位置和体积;位置通过起始位置标识在内存中所处起始位置和结束位置标识在内存中所处结束位置表示;体积通过结束位置和起始位置之间的位置差异对应的占用内存空间表示。
在一个示例性的实施例中,信息确定模块730,还用于在可执行文件执行的过程中,调用与代码模块对应的回调文件,获取起始位置、结束位置和位置差异;根据起始位置、结束位置和位置差异,输出代码模块的位置和体积。
在一个示例性的实施例中,代码模块信息确定装置还包括标识添加模块,用于获取回调文件模板;将代码模块的源文件的起始位置标识和结束位置标识,添加至回调文件模板中的对应位置,得到与代码模块对应的回调文件。
在一个示例性的实施例中,信息确定模块730,还用于在可执行文件未执行的过程中,对可执行文件进行解析,得到起始位置和结束位置;根据起始位置和结束位置,确定代码模块的位置,以及确定位置差异;确定位置差异对应的占用内存空间,作为代码模块的体积。
在一个示例性的实施例中,信息确定模块730,还用于在可执行文件未执行的过程中,获取起始位置、结束位置和位置差异;在可执行文件执行的过程中,调用与代码模块对应的回调文件,基于起始位置、结束位置和位置差异,输出代码模块的位置和体积。
在一个示例性的实施例中,文件生成模块710,还用于在链接脚本文件模板中,配置源文件在内存中的存储顺序,得到初始链接脚本文件;在初始链接脚本文件中,在源文件前后添加起始位置标识和结束位置标识,得到链接脚本文件。
在一个示例性的实施例中,代码模块信息确定装置还包括第一应用模块,用于从代码模块中,识别出对应的体积大于预设体积的代码模块,作为存在问题的目标代码模块;根据目标代码模块的位置,在内存中定位到目标代码模块。
在一个示例性的实施例中,代码模块信息确定装置还包括第二应用模块,用于根据代码模块的体积,查询体积与工作量之间的对应关系,得到代码模块的工作量;或者,根据代码模块的位置,对对应的访问频次大于预设频次的代码模块进行分散处理。
上述代码模块信息确定装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个示例性的实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图8所示。该计算机设备包括处理器、存储器、输入/输出接口、通信接口、显示单元和输入装置。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口、显示单元和输入装置通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种代码模块信息确定方法。该计算机设备的显示单元用于形成视觉可见的画面,可以是显示屏、投影装置或虚拟现实成像装置。显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个示例性的实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个示例性的实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个示例性的实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要符合相关规定。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

Claims (12)

1.一种代码模块信息确定方法,其特征在于,所述方法包括:
根据代码模块的源文件,生成所述代码模块的目标对象文件和链接脚本文件;所述链接脚本文件中所述源文件前后标记有起始位置标识和结束位置标识,所述链接脚本文件用于描述所述源文件在内存中的存储顺序;
根据所述链接脚本文件,对所述目标对象文件进行链接处理,得到所述代码模块的可执行文件;
根据所述可执行文件,确定所述代码模块的模块信息;所述模块信息中至少包括所述代码模块的位置和体积;所述位置通过所述起始位置标识在所述内存中所处起始位置和所述结束位置标识在所述内存中所处结束位置表示;所述体积通过所述结束位置和所述起始位置之间的位置差异对应的占用内存空间表示。
2.根据权利要求1所述的方法,其特征在于,所述根据所述可执行文件,确定所述代码模块的模块信息,包括:
在所述可执行文件执行的过程中,调用与所述代码模块对应的回调文件,获取所述起始位置、所述结束位置和所述位置差异;
根据所述起始位置、所述结束位置和所述位置差异,输出所述代码模块的位置和体积。
3.根据权利要求2所述的方法,其特征在于,在所述可执行文件执行的过程中,调用与所述代码模块对应的回调文件,获取所述起始位置、所述结束位置和所述位置差异之前,还包括:
获取回调文件模板;
将所述代码模块的源文件的所述起始位置标识和所述结束位置标识,添加至所述回调文件模板中的对应位置,得到与所述代码模块对应的回调文件。
4.根据权利要求1所述的方法,其特征在于,所述根据所述可执行文件,确定所述代码模块的模块信息,还包括:
在所述可执行文件未执行的过程中,对所述可执行文件进行解析,得到所述起始位置和所述结束位置;
根据所述起始位置和所述结束位置,确定所述代码模块的位置,以及确定所述位置差异;
确定所述位置差异对应的占用内存空间,作为所述代码模块的体积。
5.根据权利要求1所述的方法,其特征在于,所述根据所述可执行文件,确定所述代码模块的模块信息,还包括:
在所述可执行文件未执行的过程中,获取所述起始位置、所述结束位置和所述位置差异;
在所述可执行文件执行的过程中,调用与所述代码模块对应的回调文件,基于所述起始位置、所述结束位置和所述位置差异,输出所述代码模块的位置和体积。
6.根据权利要求1所述的方法,其特征在于,所述链接脚本文件通过下述方式得到:
在链接脚本文件模板中,配置所述源文件在内存中的存储顺序,得到初始链接脚本文件;
在所述初始链接脚本文件中,在所述源文件前后添加所述起始位置标识和所述结束位置标识,得到所述链接脚本文件。
7.根据权利要求1至6任一项所述的方法,其特征在于,在根据所述可执行文件,确定所述代码模块的模块信息之后,还包括:
从所述代码模块中,识别出对应的体积大于预设体积的代码模块,作为存在问题的目标代码模块;
根据所述目标代码模块的位置,在所述内存中定位到所述目标代码模块。
8.根据权利要求1至6任一项所述的方法,其特征在于,在根据所述可执行文件,确定所述代码模块的模块信息之后,还包括:
根据所述代码模块的体积,查询体积与工作量之间的对应关系,得到所述代码模块的工作量;
或者,
根据所述代码模块的位置,对对应的访问频次大于预设频次的代码模块进行分散处理。
9.一种代码模块信息确定装置,其特征在于,所述装置包括:
文件生成模块,用于根据代码模块的源文件,生成所述代码模块的目标对象文件和链接脚本文件;所述链接脚本文件中所述源文件前后标记有起始位置标识和结束位置标识,所述链接脚本文件用于描述所述源文件在内存中的存储顺序;
链接处理模块,用于根据所述链接脚本文件,对所述目标对象文件进行链接处理,得到所述代码模块的可执行文件;
信息确定模块,用于根据所述可执行文件,确定所述代码模块的模块信息;所述模块信息中至少包括所述代码模块的位置和体积;所述位置通过所述起始位置标识在所述内存中所处起始位置和所述结束位置标识在所述内存中所处结束位置表示;所述体积通过所述结束位置和所述起始位置之间的位置差异对应的占用内存空间表示。
10.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至8中任一项所述的方法的步骤。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至8中任一项所述的方法的步骤。
12.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至8中任一项所述的方法的步骤。
CN202311407161.8A 2023-10-26 2023-10-26 代码模块信息确定方法、装置、计算机设备和存储介质 Pending CN117453548A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311407161.8A CN117453548A (zh) 2023-10-26 2023-10-26 代码模块信息确定方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311407161.8A CN117453548A (zh) 2023-10-26 2023-10-26 代码模块信息确定方法、装置、计算机设备和存储介质

Publications (1)

Publication Number Publication Date
CN117453548A true CN117453548A (zh) 2024-01-26

Family

ID=89588669

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311407161.8A Pending CN117453548A (zh) 2023-10-26 2023-10-26 代码模块信息确定方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN117453548A (zh)

Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09305411A (ja) * 1996-05-10 1997-11-28 Nec Corp コンパイル型プログラムのプログラム実行装置
JP2010231477A (ja) * 2009-03-27 2010-10-14 Fuji Xerox Co Ltd プログラム及びプログラム実行装置
US20160124728A1 (en) * 2014-10-31 2016-05-05 Microsoft Corporation Collecting profile data for modified global variables
US20160179502A1 (en) * 2014-12-17 2016-06-23 Semmle Limited Identifying source code used to build executable files
CN106796525A (zh) * 2015-02-23 2017-05-31 华为技术有限公司 按需加载动态脚本语言代码以减少内存使用
US20180081650A1 (en) * 2016-09-22 2018-03-22 Qualcomm Innovation Center, Inc. Link time program optimization in presence of a linker script
US20180239621A1 (en) * 2016-07-25 2018-08-23 Pax Computer Technology (Shenzhen) Co., Ltd. Method and device of operating functional module cross platforms
CN111767058A (zh) * 2020-06-30 2020-10-13 上海商汤智能科技有限公司 程序编译方法及装置、电子设备和存储介质
CN112306694A (zh) * 2020-11-19 2021-02-02 网易(杭州)网络有限公司 内存分析方法和装置、计算机可读存储介质、电子设备
CN114296978A (zh) * 2021-12-27 2022-04-08 北京字节跳动网络技术有限公司 一种软件工具包地址定位方法及装置
CN114385184A (zh) * 2021-12-22 2022-04-22 苏州迈科网络安全技术股份有限公司 一种用于Lua代码嵌入的编译方法、装置、终端及存储介质
CN114489826A (zh) * 2020-11-09 2022-05-13 哲库科技(上海)有限公司 芯片运行方法、装置、存储介质及电子设备
CN115599588A (zh) * 2022-10-31 2023-01-13 浙江大华技术股份有限公司(Cn) 内存使用信息的获取方法、装置、存储介质及电子装置
CN115629795A (zh) * 2022-11-08 2023-01-20 北京奕斯伟计算技术股份有限公司 一种可执行文件的配置方法、装置及电子设备
CN116107649A (zh) * 2023-02-06 2023-05-12 苏州大学 一种d1-h应用处理器的启动方法和系统

Patent Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09305411A (ja) * 1996-05-10 1997-11-28 Nec Corp コンパイル型プログラムのプログラム実行装置
JP2010231477A (ja) * 2009-03-27 2010-10-14 Fuji Xerox Co Ltd プログラム及びプログラム実行装置
US20160124728A1 (en) * 2014-10-31 2016-05-05 Microsoft Corporation Collecting profile data for modified global variables
US20160179502A1 (en) * 2014-12-17 2016-06-23 Semmle Limited Identifying source code used to build executable files
CN106796525A (zh) * 2015-02-23 2017-05-31 华为技术有限公司 按需加载动态脚本语言代码以减少内存使用
US20180239621A1 (en) * 2016-07-25 2018-08-23 Pax Computer Technology (Shenzhen) Co., Ltd. Method and device of operating functional module cross platforms
US20180081650A1 (en) * 2016-09-22 2018-03-22 Qualcomm Innovation Center, Inc. Link time program optimization in presence of a linker script
CN111767058A (zh) * 2020-06-30 2020-10-13 上海商汤智能科技有限公司 程序编译方法及装置、电子设备和存储介质
CN114489826A (zh) * 2020-11-09 2022-05-13 哲库科技(上海)有限公司 芯片运行方法、装置、存储介质及电子设备
CN112306694A (zh) * 2020-11-19 2021-02-02 网易(杭州)网络有限公司 内存分析方法和装置、计算机可读存储介质、电子设备
CN114385184A (zh) * 2021-12-22 2022-04-22 苏州迈科网络安全技术股份有限公司 一种用于Lua代码嵌入的编译方法、装置、终端及存储介质
CN114296978A (zh) * 2021-12-27 2022-04-08 北京字节跳动网络技术有限公司 一种软件工具包地址定位方法及装置
CN115599588A (zh) * 2022-10-31 2023-01-13 浙江大华技术股份有限公司(Cn) 内存使用信息的获取方法、装置、存储介质及电子装置
CN115629795A (zh) * 2022-11-08 2023-01-20 北京奕斯伟计算技术股份有限公司 一种可执行文件的配置方法、装置及电子设备
CN116107649A (zh) * 2023-02-06 2023-05-12 苏州大学 一种d1-h应用处理器的启动方法和系统

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
ZHANGFERRY: "《程序员的自我修养(链接、装载与库)》学习笔记二(编译和链接)", Retrieved from the Internet <URL:《https://zhangferry.com/2022/12/04/cultivation_for_programmer_booknotes_2/》> *
范志东: "低功耗编译优化算法及软件功耗分析技术的研究", 中国优秀硕士学位论文全文数据库 信息科技辑, no. 2016, 15 July 2016 (2016-07-15), pages 138 - 636 *
黄振华;李外云;刘锦高;: "ARM的位置无关程序设计在Bootloader中的应用", 单片机与嵌入式系统应用, no. 01, 1 January 2008 (2008-01-01) *

Similar Documents

Publication Publication Date Title
CN109901834B (zh) 文档页面生成方法、装置、计算机设备和存储介质
EP3399721B1 (en) Interface data displaying method and device
WO2020151333A1 (zh) 页面加载方法、装置、计算机设备和存储介质
CN112433727A (zh) 一种用户界面配置方法、装置、电子设备及可读存储介质
CN106648569B (zh) 目标序列化实现方法和装置
CN114115844A (zh) 页面生成方法、装置、计算机设备和存储介质
CN105740219A (zh) 一种报表的自定义方法及装置
CN103226510B (zh) 解析vmcore文件的方法和装置
CN107391528B (zh) 前端组件依赖信息搜索方法及设备
CN111158777B (zh) 组件调用方法、装置及计算机可读存储介质
CN115509608B (zh) 指令优化方法、装置、电子设备及计算机可读存储介质
CN111857803A (zh) 页面更新方法、装置、服务器及存储介质
CN111488144A (zh) 一种数据处理方法以及设备
CN108196921B (zh) 单据开发方法、装置、计算机设备和存储介质
CN107977459B (zh) 报表生成方法及装置
CN117453548A (zh) 代码模块信息确定方法、装置、计算机设备和存储介质
CN115809056A (zh) 组件复用实现方法、装置和终端设备、可读存储介质
CN112181370B (zh) 数据交互关系的生成方法、计算机设备和存储介质
CN111831277B (zh) 虚拟数据生成方法、系统、设备及计算机可读存储介质
CN112905931A (zh) 页面信息的展示方法、装置、电子设备及存储介质
CN112417020A (zh) 业务扩展的实现方法、装置、计算机设备和存储介质
CN111897728A (zh) 接口调试方法及相关设备
CN115617324B (zh) 一种客户端网页的生成方法
JP7168532B2 (ja) 情報処理システム、情報処理方法、開発装置、および開発装置用のプログラム
CN116679852B (zh) 一种项目图标的引用方法、装置、电子设备及介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination