掌桥专利:专业的专利平台
掌桥专利
首页

适于车载平台的内存管理方法、装置、设备和存储介质

文献发布时间:2023-06-19 19:28:50


适于车载平台的内存管理方法、装置、设备和存储介质

技术领域

本申请涉及车辆技术领域,特别是涉及一种适于车载平台的内存管理方法、装置、设备和存储介质。

背景技术

目前,随着车辆技术的不断发展,车辆的智能化程度越来越高。其中,车与人、车与外界(例如车与车、车与远端控制中心)之间的信息通讯通常由车载平台实现。

车载平台中的部分软件程序需执行复杂性较高的业务,例如,车载巡航高速视觉的平台中执行的目标检测、车道线识别、摄像头动态标定程序,这些车载程序的复杂性高、对数据的实时性要求很高,随着车载程序的持续运行,持续的动态为程序分配内存很容易产生内存碎片,降低程序执行效率,影响数据实时性。因此,亟需一种适于车载平台的内存管理方法以解决上述问题。

发明内容

基于此,本申请提供了一种适于车载平台的内存管理方法、装置、设备和存储介质,以解决现有技术中存在的问题。

第一方面,提供一种适于车载平台的内存管理方法,应用于车辆终端处理器的内存管理系统,该方法包括:

响应于车载平台程序运行,向操作系统申请设定值内存;

响应于所述车载平台程序的程序模块发送的内存申请请求,从所述设定值内存中分配与所述内存申请请求对应的第一内存块;

确定所述第一内存块的内存地址,向所述程序模块发送所述第一内存块的内存地址,所述程序模块在运行过程中基于所述第一内存块的内存地址向所述第一内存块存储数据和/或读取数据;

响应于所述程序模块的内存释放请求,释放所述第一内存块;

响应于所述车载平台程序退出运行,释放所述设定值内存,向所述操作系统反馈所述设定值内存释放的信息。

根据本申请实施例中一种可实现的方式,所述方法还包括:

获取所述第一内存块的标识信息,所述标识信息用于识别出所述第一内存块;

响应于所述程序模块的内存释放请求,将所述第一内存块释放至所述设定值内存;

将所述第一内存块释放至所述设定值内存的时间点以及所述第一内存块的标识信息记载到缓存列表;

对所述第一内存块设置待使用标识并将所述第一内存块的待使用标识与所述第一内存块的标识信息关联,所述第一内存块的待使用标识表征所述第一内存块处于可用且不能被重置的状态。

根据本申请实施例中一种可实现的方式,所述方法还包括:

读取所述缓存列表中所述第一内存块释放至所述设定值内存的时间点;

在距离所述第一内存块释放至所述设定值内存的时间点预设时间段后,对所述第一内存块设置空闲标识并将所述空闲标识与所述第一内存块的标识信息关联,所述空闲标识表征所述第一内存块处于可用且能被重置的状态。

根据本申请实施例中一种可实现的方式,所述从所述设定值内存中分配与所述内存申请请求对应的第一内存块,包括:

获取所述设定值内存中可用内存的内存值;若所述可用内存的内存值大于或等于所述第一内存块的内存值,则从所述可用内存中分配与所述内存申请请求对应的第一内存块;

若所述可用内存的内存值小于所述第一内存块的内存值,则向所述操作系统申请扩充值内存,以使得所述操作系统为所述设定值内存扩充内存量,在所述第一内存扩充内存量后分配与所述内存申请请求对应的第一内存块;

其中,所述扩充值内存的内存值大于或等于所述第一内存块的内存值与所述可用内存的内存值的差值。

根据本申请实施例中一种可实现的方式,所述从所述可用内存中分配与所述内存申请请求对应的第一内存块,包括:

查询缓存列表,从所述缓存列表中读取一个或多个待使用标识,所述缓存列表中记载有一个或多个待使用标识以及各待使用标识对应的待使用内存块的标识信息;其中,所述待使用标识表示对应的待使用内存块处于可用且不能被重置的状态,所述可用内存包括所述一个或多个待使用内存块;

基于各待使用标识对应的待使用内存块的标识信息,确定各待使用内存块的内存值;

若任一待使用内存块的内存值与所述内存申请请求对应的第一内存块的内存值相等,则将所述任一待使用内存块作为所述内存申请请求对应的第一内存块。

根据本申请实施例中一种可实现的方式,所述方法还包括:

若任一待使用内存块的内存值与所述内存申请请求对应的第一内存块的内存值不相等,则从所述缓存列表中读取一个或多个空闲标识,所述缓存列表中记载有一个或多个空闲标识以及各空闲标识对应的空闲内存块的标识信息;其中,所述空闲标识表示对应的空闲内存块处于可用且能被重置的状态,所述可用内存包括所述一个或多个待使用内存块;

基于各空闲标识对应的空闲内存块的标识信息,确定各空闲内存块的内存值;

若任一空闲内存块的内存值与所述内存申请请求对应的第一内存块的内存值相等,则将所述任一空闲内存块作为所述内存申请请求对应的第一内存块;

若任一空闲内存块的内存值与所述内存申请请求对应的第一内存块的内存值不相等,则获取任一内存值大于所述第一内存块的内存值的空闲内存块,基于所述任一内存值大于所述第一内存块的内存值的空闲内存块划分出第二内存块,所述第二内存块的内存值等于所述第一内存块的内存值;

将所述第二内存块作为所述内存申请请求对应的第一内存块。

根据本申请实施例中一种可实现的方式,所述向所述操作系统申请扩充值内存,包括:

若所述可用内存的内存值为零,则向所述操作系统申请扩充值内存,所述扩充值内存的内存值等于所述第一内存块的内存值;

若所述可用内存的内存值为非零,则向所述操作系统申请扩充值内存,所述扩充值内存的内存值等于所述第一内存块的内存值与所述可用内存的内存值的差值。

根据本申请实施例中一种可实现的方式,所述方法还包括:

响应于所述程序模块的内存释放请求,将所述第一内存块释放至所述设定值内存;

响应于所述设定值内存的当前内存值大于所述设定值内存的初始内存值,向操作系统释放所述设定值内存的当前内存值和所述初始内存值的差值对应的内存。

根据本申请实施例中一种可实现的方式,所述车载平台程序包括车载巡航高速视觉平台程序;

所述车载平台程序的程序模块包括目标检测程序模块、车道线识别程序模块、摄像头动态标定程序模块中的一种或多种。

根据本申请实施例中一种可实现的方式,所述设定值内存为所述操作系统内存和所述车载平台程序的程序模块之间设定的内存池。

根据本申请实施例所提供的技术内容,本申请通过提供一种适于车载平台的内存管理方法,在车载平台程序运行时,向操作系统申请设定值内存;当车载平台程序的程序模块运行时,从设定值内存中分配内存块供程序模块运行使用;当车载平台程序退出运行时,再统一向操作系统释放设定值内存。

本申请在车载平台程序运行时,向操作系统申请设定值内存,车载平台程序的任一程序模块运行时,直接在设定值内存中为程序模块分配内存,无需向操作系统申请内存,从而减少了向操作系统申请内存以及等待操作系统响应并分配内存这一操作的等待时间,提高了车载平台程序的程序模块的执行效率。此外,由于直接从设定值内存中分配内存并在分配的内存中存储数据和/或读取数据,减少向操作系统申请内存以及等待操作系统响应并分配内存这一操作的等待时间,提高了数据读取和存储的实时性。另外,在车载平台程序退出运行时,释放设定值内存,向操作系统反馈设定值内存释放的信息,以使得操作系统能够再次分配设定值内存,从而减少持续动态为程序分配内存而产生内存碎片,优化车载平台的内存管理。

附图说明

图1为一个实施例中适于车载平台的内存管理方法的流程示意图;

图2为一个实施例中适于车载平台的内存管理方法的示意图;

图3为一个实施例中适于车载平台的内存管理装置的结构框图;

图4为一个实施例中计算机设备的示意性结构图。

具体实施方式

以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

图1为本申请实施例提供的一种适于车载平台的内存管理方法的流程图,本申请实施例提供的方法应用于车辆终端处理器的内存管理系统内。如图1所示,该方法可以包括以下步骤:

步骤101:响应于车载平台程序运行,向操作系统申请设定值内存。

具体地,车载平台是人、车、环境交互,集电子、通信、网络等技术一体的车载综合信息平台,用于实现车与人、车与外界之间的信息通讯。车载平台程序是车载平台中执行的软件程序,例如,车载平台程序可以为车载巡航高速视觉程序、车载多媒体影音娱乐程序、远程故障诊断程序等。车载巡航高速视觉的平台用于执行车载巡航过程中复杂性高、实时性高的视觉检测、视觉识别等程序,如目标检测、车道线识别、摄像头动态标定等。当任一个车载平台程序运行时,车辆终端处理器的内存管理系统向操作系统申请与该车载平台程序对应的设定值内存。如图2所示,设定值内存为本申请设定的内存池,为系统内存和程序模块之间设定的虚拟中间层。其中,设定值内存相当于在操作系统内存和车载平台程序之间抽象了一个中间层的内存池,当任一车载平台程序启动时,内存管理系统会向操作系统先申请一定的存储空间作为内存池,该内存池为车载平台程序提供存储数据和/或读取数据的功能。车载平台程序启动之后,向系统申请内存池,并初始化内存池链表,记录默认内存值,默认内存值即该内存池的初始内存值。

步骤102:响应于车载平台程序的程序模块发送的内存申请请求,从设定值内存中分配与内存申请请求对应的第一内存块。

具体地,每一个车载平台程序执行若干个不同的任务,因此车载平台程序包含若干个不同的程序模块。例如,车载巡航高速视觉程序包含以下程序模块:目标检测程序模块,车道线识别程序模块,摄像头动态标定程序模块。响应于车载平台程序的程序模块发送的内存申请请求,从设定值内存中分配与内存申请请求对应的第一内存块以供该程序模块初始化及运行使用。若同时有多个程序模块的内存请求,可以依据预先设定的的优先级先后分配内存。

步骤103:确定第一内存块的内存地址,向程序模块发送第一内存块的内存地址,程序模块在运行过程中基于第一内存块的内存地址向第一内存块存储数据和/或读取数据。

具体地,在根据程序模块发送的内存申请请求,从设定值内存中分配与内存申请请求对应的第一内存块之后,确定第一内存块的内存地址并向程序模块发送第一内存块的内存地址以供程序模块运行使用。程序模块在运行过程中基于第一内存块的内存地址向第一内存块存储数据和/或读取数据。

步骤104:响应于程序模块的内存释放请求,释放第一内存块。

具体地,车载平台程序中的程序模块会从设定值内存中申请内存块block以供程序模块运行使用;当程序模块停止运行时,响应于程序模块的内存释放请求,程序模块会将内存块block释放,并向设定值内存反馈该程序模块内存释放的信息。

步骤105:响应于车载平台程序退出运行,释放设定值内存,向操作系统反馈设定值内存释放的信息。

具体地,上述步骤中,在操作系统内存和车载平台程序之间抽象了一个中间层的内存池,当车载平台程序启动时,内存池会向操作系统,先申请设定值内存的内存空间,设定值内存的内存空间作为中间层的内存池;接着车载平台程序中的程序模块会从设定值内存中申请内存块block以供程序模块运行使用;当程序模块停止运行时,程序模块会将内存块block释放给内存池。最后,本步骤中,当车载平台程序退出运行时,内存池释放设定值内存,并向操作系统反馈设定值内存释放的信息,向操作系统释放设定值内存,由内存池统一将设定值内存返还给操作系统。

可以看出,本申请实施例通过提供一种适于车载平台的内存管理方法,在车载平台程序运行时,向操作系统申请设定值内存;当车载平台程序的程序模块运行时,从设定值内存中分配内存块供程序模块运行使用;当车载平台程序退出运行时,再统一向操作系统释放设定值内存。本申请可以减少持续动态为程序分配内存而产生内存碎片,提高程序执行效率,提高数据实时性,优化车载平台的内存管理。

在本申请的一个实施例中,车载平台程序包括车载巡航高速视觉平台程序;车载平台程序的程序模块包括目标检测程序模块、车道线识别程序模块、摄像头动态标定程序模块中的一种或多种。

具体地,在本实施例中,本申请提供的适于车载平台的内存管理方法包括如下步骤:首先,响应于车载巡航高速视觉平台程序运行,向操作系统申请设定值内存;其次,响应于车载巡航高速视觉平台程序的目标检测、车道线识别、摄像头动态标定程序中的程序模块发送的内存申请请求,从设定值内存中分配与内存申请请求对应的第一内存块,其中,一个程序模块分配一个内存块,当启动多个程序模块时,为各程序模块分别分配内存块;再次,确定第一内存块的内存地址,向程序模块发送第一内存块的内存地址,程序模块在运行过程中基于第一内存块的内存地址向第一内存块存储数据和/或读取数据;最后响应于车载巡航高速视觉平台程序退出运行,释放设定值内存,并向操作系统反馈设定值内存释放的信息;向操作系统释放设定值内存。

在本申请的一个实施例中,本申请提供的一种适于车载平台的内存管理方法还包括:步骤106:获取第一内存块的标识信息,所述标识信息用于识别出所述第一内存块;步骤107:响应于程序模块的内存释放请求,将第一内存块释放至设定值内存;步骤108:将第一内存块释放至设定值内存的时间点以及第一内存块的标识信息记载到缓存列表;步骤109:对所述第一内存块设置待使用标识并将所述第一内存块的待使用标识与所述第一内存块的标识信息关联,所述第一内存块的待使用标识表征所述第一内存块处于可用且不能被重置的状态。

具体地,当程序模块根据分配的第一内存块执行相应的任务之后,程序模块释放内存并发送内存释放请求,将程序模块使用的第一内存块释放至设定值内存。此时,获取第一内存块的标识信息,标识信息即blockid,表征内存块的标识号码,用于识别出所述第一内存块,将第一内存块释放至设定值内存的时间点以及第一内存块的标识信息记载到缓存列表。例如,如图2所示,释放请求(1~m)将对应的内存块Block1、Blockx、Blockm释放至中间内存池,同时将Block1、Blockx、Blockm的标识信息即blockid和释放至内存池的时间点记录在缓存列表。

缓存列表用于在一段时间内展示被程序模块释放至设定值内存的第一内存块的标识信息blockid以及该第一内存块释放至设定值内存的时间信息,便于该程序模块在一定时间段内再一次申请内存时可以直接从缓存列表中的标识信息找到与该程序模块对应的第一内存块,并使用该第一内存块,从而提高程序执行的效率,减少了访问次数,同时保证了性能。例如,图2中内存申请x表示程序模块在短时间内再次申请内存,内存申请x对应的内存块Blockx的标识信息存储在缓存列表中且设置了待使用标识,则直接获取内存块Blockx的内存地址并发动给程序模块使用,从而提高程序执行的效率。

另外,对第一内存块设置待使用标识并将待使用标识与第一内存块的标识信息即blockid关联。待使用标识表征第一内存块为可用且不能被重置的状态。其中,可用状态指的是该内存块可用被使用,不能被重置状态是指该内存块只能直接被使用,不能被切分或合并成其他内存大小的内存块初始化后再使用。

本申请的实施例通过在程序模块释放内存后,将内存块释放至内存池的时间点以及内存块的标识信息记载到blockid缓存列表,缓存列表使用blockid对内存池中的内存块进行索引,区别于现有技术中主副内存池的存储形式,节省了额外的内存空间。

在上述实施例的基础上,在本申请的一个实施例中,本申请提供的一种适于车载平台的内存管理方法还包括:步骤110:读取缓存列表中第一内存块释放至设定值内存的时间点;步骤111:在距离第一内存块释放至设定值内存的时间点预设时间段后,对第一内存块设置空闲标识并将空闲标识与第一内存块的标识信息关联,空闲标识表征第一内存块为可用且能够被重置的状态。

具体地,在步骤101-108的基础上,程序模块释放内存并发送内存释放请求,将程序模块使用的第一内存块释放至设定值内存,第一内存块释放至设定值内存的时间点以及第一内存块的标识信息blockid记载到缓存列表。进一步地,读取缓存列表中第一内存块释放至设定值内存的时间点t1;在距离第一内存块释放至设定值内存的时间点t1的预设时间段后,对第一内存块设置空闲标识并将空闲标识与第一内存块的标识信息blockid关联,空闲标识表征第一内存块为可用且能够被重置的状态。例如,距离t1200毫秒之后,表示缓存列表中第一内存块释放至设定值内存的时间已经达到或超过200毫秒,此时,取消第一内存块的待使用标识,对第一内存块设置空闲标识并将空闲标识与第一内存块的标识信息blockid关联。在第一内存块设置空闲标识之后,第一内存块可以被使用且能够可以被切分或合并成其他内存大小的内存块初始化再使用。

本申请的实施例同时为缓存列表中的每个blockid增加定时器,在距离第一内存块释放至设定值内存的时间点的预设时间段后,对第一内存块设置空闲标识并将空闲标识与第一内存块的标识信息关联,可以保证程序运行占用操作系统的内存大小在可控范围之内,减少了访问内核次数,同时保证了性能。

在本申请的一个实施例中,上述步骤102中的从设定值内存中分配与内存申请请求对应的第一内存块,包括:步骤1021:获取设定值内存中可用内存的内存值;若可用内存的内存值大于或等于第一内存块的内存值,则从可用内存中分配与内存申请请求对应的第一内存块;步骤1022:若可用内存的内存值小于第一内存块的内存值,则向操作系统申请扩充值内存,以使得操作系统为设定值内存扩充内存量,并分配与内存申请请求对应的第一内存块;其中,扩充值内存的内存值大于或等于第一内存块的内存值与可用内存的内存值的差值。

具体地,当某一个程序模块启动并申请内存时,首先,计算设定值内存中现有的所有可用内存块的大小,判断内存池中现有的可用内存块是否有足够的内存提供给程序模块使用。若有足够的内存,则在内存池中分配第一内存块并向程序模块释放对应的内存地址,例如,如图2所示,图2中的内存申请2表示内存池有足够的内存,在内存池中分配第一内存块Block1并向程序模块释放对应的内存地址。若没有足够的内存,则向操作系统申请额外的内存块加入内存池得到扩充后的内存池,在扩充后的内存池中分配第一内存块并向程序模块释放对应的内存地址。例如,图2中的内存申请1表示内存池没有足够的内存,向操作系统申请额外的内存块加入内存池得到扩充后的内存池,在扩充后的内存池中分配第一内存块Blockn并向程序模块释放对应的内存地址。也就是说,若可用内存的内存值大于或等于第一内存块的内存值,则从可用内存中分配与程序模块的内存申请请求对应的第一内存块;若可用内存的内存值小于第一内存块的内存值,则向操作系统申请扩充值内存,以使得操作系统为设定值内存扩充内存量,并分配与程序模块的内存申请请求对应的第一内存块;其中,扩充值内存大于或等于第一内存块的内存值与可用内存的内存值的差值。

在本申请的一个实施例中,上述步骤1021中的从可用内存中分配与内存申请请求对应的第一内存块,包括:查询缓存列表,从所述缓存列表中读取一个或多个待使用标识,所述缓存列表中记载有一个或多个待使用标识以及各待使用标识对应的待使用内存块的标识信息;其中,所述待使用标识表示对应的待使用内存块处于可用且不能被重置的状态;基于各待使用标识对应的待使用内存块的标识信息,确定各待使用内存块的内存值;若任一待使用内存块的内存值与所述内存申请请求对应的第一内存块的内存值相等,则将所述任一待使用内存块作为所述内存申请请求对应的第一内存块。

具体地,当内存池现有可用的内存块的大小能为程序模块提供足够的内存时,则首先查询缓存列表中是否有内存块的大小等于程序模块申请的内存的大小。若有,则直接根据缓存列表里的内存标识信息找到对应的内存块,将该内存块的内存地址发送至程序模块。需要说明的是,本实施例中的缓存列表与上述实施例中的缓存列表可以是相同表,也可以是不同的表,缓存列表记载了待使用标识和内存块的信息即可。也就是说,当内存池现有可用的内存块的大小能为程序模块提供足够的内存时,首先查询缓存列表,从缓存列表中读取待使用标识,缓存列表中记载有一个或多个待使用标识以及各待使用标识对应的待使用内存块的标识信息blockid。其中,待使用标识表示缓存列表中的内存块的标识信息blockid对应的内存块可用且不能被重置。可用指的是该内存块可用被使用,不能被重置是指该内存块只能直接被使用,不能被切分或合并成其他内存大小的内存块初始化后再使用。

其次,读取各待使用内存块的标识信息,得到各待使用内存块的内存值size;若任一待使用内存块的内存值与内存申请请求对应的第一内存块内存值相等,则将该待使用内存块作为内存申请请求对应的第一内存块。

本申请的实施例,在内存池可用内存的内存值大于第一内存块的内存值时,首先查询缓存列表中待使用标识对应的待使用的内存块,并获取待使用内存块的内存大小,若有待使用内存块的大小等于程序模块申请的第一内存块的大小,则直接将缓存列表中的待使用内存块作为第一内存块,并将地址发送给程序模块供程序模块运行使用,避免短时间内程序模块的多次启动,每次都需要给程序模块分配内存操作,可直接给程序模块分配它上次申请的内存。可以提高程序执行效率,提高数据实时性,优化车载平台的内存管理。

在本申请的一个实施例中,本申请提供的适于车载平台的内存管理方法还包括:若任一待使用内存块的内存值与所述内存申请请求对应的第一内存块的内存值相等,则从所述缓存列表中读取一个或多个空闲标识,所述缓存列表中记载有一个或多个空闲标识以及各空闲标识对应的空闲内存块的标识信息;其中,所述空闲标识表示对应的空闲内存块处于可用且能被重置的状态;基于各空闲标识对应的空闲内存块的标识信息,确定各空闲内存块的内存值;若任一空闲内存块的内存值与所述内存申请请求对应的第一内存块的内存值相等,则将所述任一空闲内存块作为所述内存申请请求对应的第一内存块;若任一空闲内存块的内存值与所述内存申请请求对应的第一内存块的内存值不相等,则获取任一内存值大于所述第一内存块的内存值的空闲内存块,基于所述任一内存值大于所述第一内存块的内存值的空闲内存块划分出第二内存块;将所述第二内存块作为所述内存申请请求对应的第一内存块。

具体地,查询缓存列表中是否有待使用内存块的大小等于程序模块申请的内存的大小。若没有,则读取空闲标识信息对应空闲内存块的内存值,空闲内存块处于可用且能被重置的状态,即空闲内存块可以被切分为其他内存大小的内存块初始化使用。根据程序模块申请的内存大小,初始化对应大小的空闲内存块,得到第二内存块,将该第二内存块的内存地址发送至程序模块,供程序模块使用。根据程序模块申请的内存大小,进行切分重置等初始化操作后得到的与程序模块申请的内存大小对应的内存块集合称为第二内存块。也就是说,若缓存列表中各待使用内存块的内存值均与内存申请请求对应的第一内存块的内存值不相等,则获取任一内存值大于第一内存块的内存值的空闲内存块。其中,空闲内存块标识给内存块为可用状态并且可以分割初始化为不同大小的内存块。将空闲内存块初始化得到内存值的大小与第一内存块相等的第二内存块,将第二内存块作为内存申请请求对应的第一内存块,向程序模块释放该第二内存块的内存地址,供程序模块运行使用。

在本申请的一个实施例中,上述步骤1022中的向操作系统申请扩充值内存,包括:若可用内存的内存值为零,则向操作系统申请扩充值内存,扩充值等于第一内存块的内存值;若可用内存的内存值为非零,则向操作系统申请扩充值内存,扩充值等于第一内存块的内存值与可用内存的内存值的差值。

具体地,当内存池现有的内存块的大小不能为程序模块提供足够的内存时,则向操作系统申请扩充值内存,向操作系统申请的内存的大小根据内存池空间是否已满来判断。若内存池空间已满,即可用内存的内存值为零,则向操作系统申请扩充值内存,扩充值等于第一内存块的内存值。若内存池空间未满,即可用内存的内存值为非零,则向操作系统申请扩充值内存,扩充值等于第一内存块的内存值与可用内存的内存值的差值。

在本申请的一个实施例中,本申请提供的适于车载平台的内存管理方法还包括:响应于所述程序模块的内存释放请求,将所述第一内存块释放至所述设定值内存;响应于所述设定值内存的当前内存值大于所述设定值内存的初始内存值,向操作系统释放所述设定值内存的当前内存值和所述初始内存值的差值对应的内存。

具体地,响应于所述程序模块的内存释放请求,将所述第一内存块释放至所述设定值内存,计算此时设定值内存的所有内存块大小,与设定值内存的初始大小即初始内存值比较。若设定值内存现有的内存大小大于设定值内存的初始内存值,向操作系统释放设定值内存的当前内存值和所述初始内存值的差值对应的内存。。本申请在程序模块使用完成并释放第一内存块之后,计算内存池的大小是否等于初始的默认内存值,将多余部分的内存块释放给操作系统,从而动态保持内存池的大小为不变,从而保证内存分配的稳定性。

根据本申请提供的具体实施例,本申请所提供的技术方案可以具备以下优点:

首先,通过提供一种适于车载平台的内存管理方法,在车载平台程序运行时,向操作系统申请设定值内存;当车载平台程序的程序模块运行时,从设定值内存中分配内存块供程序模块运行使用;当车载平台程序退出运行时,再统一向操作系统释放设定值内存。本申请可以减少持续动态为程序分配内存而产生内存碎片,提高程序执行效率,提高数据实时性,优化车载平台的内存管理。

其次,通过在程序模块释放内存后,将内存块释放至内存池的时间点以及内存块的标识信息记载到blockid缓存列表,缓存列表使用blockid对内存池中的内存块进行索引,区别于现有技术中主副内存池的存储形式,节省了额外的内存空间。

再次,同时为缓存列表中的每个blockid增加定时器,在距离第一内存块释放至设定值内存的时间点的预设时间段后,对第一内存块设置空闲标识并将空闲标识与第一内存块的标识信息关联,可以保证程序运行占用操作系统的内存大小在可控范围之内,减少了访问内核次数,同时保证了性能。

应该理解的是,虽然图1的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本申请中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

图3为本申请实施例提供的一种适于车载平台的内存管理装置的结构示意图,如3所示,该装置可以包括:内存模块301、分配模块302、发送模块303、释放模块304。其中各组成模块的主要功能如下:

内存模块301:用于响应于车载平台程序运行,向操作系统申请设定值内存;

分配模块302:用于响应于所述车载平台程序的程序模块发送的内存申请请求,从所述设定值内存中分配与所述内存申请请求对应的第一内存块;

发送模块303:确定所述第一内存块的内存地址,向所述程序模块发送所述第一内存块的内存地址,所述程序模块在运行过程中基于所述第一内存块的内存地址向所述第一内存块存储数据和/或读取数据;

释放模块304:用于响应于所述程序模块的内存释放请求,释放所述第一内存块,响应于所述车载平台程序退出运行,释放所述设定值内存,向所述操作系统反馈所述设定值内存释放的信息。

在本申请的一个实施例中,装置还包括:获取模块305:获取所述第一内存块的标识信息,所述标识信息用于识别出所述第一内存块;缓存模块306:响应于所述程序模块的内存释放请求,将所述第一内存块释放至所述设定值内存;将所述第一内存块释放至所述设定值内存的时间点以及所述第一内存块的标识信息记载到缓存列表;对所述第一内存块设置待使用标识并将所述第一内存块的待使用标识与所述第一内存块的标识信息关联,所述第一内存块的待使用标识表征所述第一内存块处于可用且不能被重置的状态。

在本申请的一个实施例中,装置还包括:读取模块307:用于读取缓存列表中第一内存块释放至设定值内存的时间点;关联模块308:在距离第一内存块释放至设定值内存的时间点的预设时间段后,对第一内存块设置空闲标识并将空闲标识与第一内存块的标识信息关联,空闲标识表征第一内存块为可用且能够被重置的状态。

在本申请的一个实施例中,分配模块302还有用于:获取设定值内存中可用内存的内存值;若可用内存的内存值大于或等于第一内存块的内存值,则从可用内存中分配与内存申请请求对应的第一内存块;若可用内存的内存值小于第一内存块的内存值,则向操作系统申请扩充值内存,以使得操作系统为设定值内存扩充内存量,并分配与内存申请请求对应的第一内存块;其中,扩充值内存大于或等于第一内存块的内存值与可用内存的内存值的差值。

在本申请的一个实施例中,分配模块302还有用于:查询缓存列表,从所述缓存列表中读取一个或多个待使用标识,所述缓存列表中记载有一个或多个待使用标识以及各待使用标识对应的待使用内存块的标识信息;其中,所述待使用标识表示对应的待使用内存块处于可用且不能被重置的状态;基于各待使用标识对应的待使用内存块的标识信息,确定各待使用内存块的内存值;若任一待使用内存块的内存值与所述内存申请请求对应的第一内存块的内存值相等,则将所述任一待使用内存块作为所述内存申请请求对应的第一内存块。

在本申请的一个实施例中,分配模块302还有用于:若任一待使用内存块的内存值与所述内存申请请求对应的第一内存块的内存值不相等,则从所述缓存列表中读取一个或多个空闲标识,所述缓存列表中记载有一个或多个空闲标识以及各空闲标识对应的空闲内存块的标识信息;其中,所述空闲标识表示对应的空闲内存块处于可用且能被重置的状态;基于各空闲标识对应的空闲内存块的标识信息,确定各空闲内存块的内存值;若任一空闲内存块的内存值与所述内存申请请求对应的第一内存块的内存值相等,则将所述任一空闲内存块作为所述内存申请请求对应的第一内存块;若任一空闲内存块的内存值与所述内存申请请求对应的第一内存块的内存值不相等,则获取任一内存值大于所述第一内存块的内存值的空闲内存块,基于所述任一内存值大于所述第一内存块的内存值的空闲内存块划分出第二内存块;将所述第二内存块作为所述内存申请请求对应的第一内存块。

在本申请的一个实施例中,分配模块302还有用于:若可用内存的内存值为零,则向操作系统申请扩充值内存,扩充值等于第一内存块的内存值;若可用内存的内存值为非零,则向操作系统申请扩充值内存,扩充值等于第一内存块的内存值与可用内存的内存值的差值。

在本申请的一个实施例中,还包括:回收模块309:用于响应于所述程序模块的内存释放请求,将所述第一内存块释放至所述设定值内存;响应于所述设定值内存的当前内存值大于所述设定值内存的初始内存值,向操作系统释放所述设定值内存的当前内存值和所述初始内存值的差值对应的内存。

在本申请的一个实施例中,车载平台程序包括车载巡航高速视觉平台程序;车载平台程序的程序模块包括目标检测、车道线识别、摄像头动态标定程序中的一种或多种。

根据本申请提供的具体实施例,本申请所提供的技术方案可以具备以下优点:

首先,通过提供一种适于车载平台的内存管理装置,在车载平台程序运行时,向操作系统申请设定值内存;当车载平台程序的程序模块运行时,从设定值内存中分配内存块供程序模块运行使用;当车载平台程序退出运行时,再统一向操作系统释放设定值内存。本申请可以减少持续动态为程序分配内存而产生内存碎片,提高程序执行效率,提高数据实时性,优化车载平台的内存管理。

其次,通过在程序模块释放内存后,将内存块释放至内存池的时间点以及内存块的标识信息记载到blockid缓存列表,缓存列表使用blockid对内存池中的内存块进行索引,区别于现有技术中主副内存池的存储形式,节省了额外的内存空间。

再次,同时为缓存列表中的每个blockid增加定时器,在距离第一内存块释放至设定值内存的时间点的预设时间段后,对第一内存块设置空闲标识并将空闲标识与第一内存块的标识信息关联,可以保证程序运行占用操作系统的内存大小在可控范围之内,减少了访问内核次数,同时保证了性能。

上述各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

需要说明的是,本申请实施例中可能会涉及到对用户数据的使用,在实际应用中,可以在符合所在国的适用法律法规要求的情况下(例如用户明确同意,对用户切实通知,用户明确授权等),在适用法律法规允许的范围内在本文描述的方案中使用用户特定的个人数据。

根据本申请的实施例,本申请还提供了一种计算机设备、一种计算机可读存储介质。本申请还提供了一种计算机设备,包括至少一个处理器,以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的计算机指令,计算机指令被至少一个处理器执行,以使至少一个处理器能够执行上述任一实施例所述适于车载平台的内存管理方法。

如图4所示,是根据本申请实施例的计算机设备的框图。计算机设备旨在表示各种形式的数字计算机或移动装置。其中数字计算机可以包括台式计算机、便携式计算机、工作台、个人数字助理、服务器、大型计算机和其它适合的计算机。移动装置可以包括平板电脑、智能电话、可穿戴式设备等。

如图4所示,计算机设备400包括计算单元401、ROM402、RAM403、总线404以及输入/输出(I/O)接口405,计算单元401、ROM402以及RAM403通过总线404彼此相连。输入/输出(I/O)接口405也连接至总线404。

计算单元401可以根据存储在只读存储器(ROM)402中的计算机指令或者从存储单元408加载到随机访问存储器(RAM)403中的计算机指令,来执行本申请方法实施例中的各种处理。计算单元401可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元401可以包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。在一些实施例中,本申请实施例提供的方法可被实现为计算机软件程序,其被有形地包含于计算机可读存储介质,例如存储单元408。

RAM403还可存储设备400操作所需的各种程序和数据。计算机程序的部分或者全部可以经由ROM402和/或通信单元409而被载入和/或安装到设备400上。

计算机设备400中的输入单元406、输出单元407、存储单元408和通信单元409可以连接至I/O接口405。其中,输入单元406可以是诸如键盘、鼠标、触摸屏、麦克风等;输出单元407可以是诸如显示器、扬声器、指示灯等。设备400能够通过通信单元409与其他设备进行信息、数据等的交换。

需要说明的是,该设备还可以包括实现正常运行所必需的其他组件。也可以仅包含实现本申请方案所必需的组件,而不必包含图中所示的全部组件。

此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件和/或它们的组合中实现。

用于实施本申请的方法的计算机指令可以采用一个或多个编程语言的任何组合来编写。这些计算机指令可以提供给计算单元401,使得计算机指令当由诸如处理器等计算单元401执行时使执行本申请方法实施例中涉及的各步骤。

本申请还提供了一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令用于使计算机执行上述任一实施例所述适于车载平台的内存管理方法。

本申请提供的计算机可读存储介质可以是有形的介质,其可以包含或存储计算机指令,用以执行本申请方法实施例中涉及的各步骤。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的等形式的存储介质。

上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。

相关技术
  • 一种内存池的管理方法、装置、设备及可读存储介质
  • 平台应用管理方法、装置、存储介质及终端设备
  • 一种后端存储设备的管理方法、装置、设备以及存储介质
  • 一种内存数据库备份管理方法、装置、终端及存储介质
  • 多版本数据存储管理方法及装置、电子设备、存储介质
  • 内存管理方法、装置、内存管理器、设备及存储介质
  • 设备内存管理方法、装置、终端设备及存储介质
技术分类

06120115920038