CN114356715A - 一种内存管理方法、装置、设备及存储介质 - Google Patents
一种内存管理方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114356715A CN114356715A CN202210017473.7A CN202210017473A CN114356715A CN 114356715 A CN114356715 A CN 114356715A CN 202210017473 A CN202210017473 A CN 202210017473A CN 114356715 A CN114356715 A CN 114356715A
- Authority
- CN
- China
- Prior art keywords
- variable
- memory
- free area
- controller
- information
- 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
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本申请公开了一种内存管理方法、装置、设备及存储介质,包括:当监测到正在运行的控制器中的内存数据发生变化时,则确定出已经发生变化的增量变量和未发生变化的第一变量,并记录第一变量的内存信息得到第一变量内存信息;创建与所述控制器等量的新内存,并根据第一变量内存信息将所述第一变量回填至新内存中;获取当前新内存中的空闲区,并在空闲区中为所述增量变量重新分配内存地址,再进行初始化处理。本申请基于增量的内存管理方式来管理控制器中的内存,在不改变其它变量内存地址和运行状态的情况,实现对变化的变量数据的有效内存分配,达到无扰增量分配内存地址,即在不影响控制器正常运行的前提下实现控制器中内存的在线修改维护。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种内存管理方法、装置、设备及存储介质。
背景技术
工业控制系统中的控制器运行的工程程序来源于上位机的组态软件,即上位机的组态软件依据控制器的资源配置编辑生成工程组态数据,然后通过编译将组态语言信息、硬件配置信息、工程附属信息、网络变量信息、任务配置信息、SOE(Sequence Of Event,事件顺序记录)变量信息等工程组态数据编译成目标控制器平台的机器语言,并下装到目标控制器中进行运行,工程组态定义和使用的各种变量在运行时需要的内存是在编译时分配的,包括内存区号、内存偏移地址及所占内存大小。
然而,由于工业控制系统中的控制器属于嵌入式设备,内部资源有限,对数据的安全性要求较高,并且内存承担程序运行时的数据存储,因此如何安全有效的管理内存显的特别重要,尤其是对正在运行的控制器的工程进行修改调整,涉及到内存变动时的管理技术难度大,处理不完善会对现场控制造成严重影响。
针对上述问题,目前的内存管理方法比较简单粗暴,不能对变化的变量内存进行精准的管理和分配,只是简单的对所有变量重新初始化分配内存地址,因此,对于同一个变量,每次编译时都会重新分配内存地址,导致其内存地址可能每次都不一样,其值也可能被重新初始化,不能保持变量的原有值,数据的连续性得不到有效保证,这对于正在运行的控制器来说是不可接受的。另外,因为变量内存的重新分配,对于那些未做修改的变量,与之相关的逻辑计算,数据搬运等工程应用也要作相应的调整,从而变相的扩大了变更的范围,也增加了编译时的工作量和时耗。
综上所述,如何对控制器的内存进行安全有效的管理是目前还有待进一步解决的问题。
发明内容
有鉴于此,本申请的目的在于提供一种内存管理方法、装置、设备及存储介质,能够在不影响控制器正常运行的前提下实现控制器中内存的在线修改维护。其具体方案如下:
第一方面,本申请公开了一种内存管理方法,包括:
当监测到正在运行的控制器中的内存数据发生变化时,则确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息,得到第一变量内存信息;
创建与所述控制器等量的新内存,并根据所述第一变量内存信息将所述第一变量回填至所述新内存中;
获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,再进行初始化处理。
可选的,所述内存管理方法,还包括:
获取所述控制器中目标数据区的所有变量,并通过编译对所述所有变量进行初始化分配内存地址,以得到所述初始化目标变量。
可选的,所述增量变量包括发生了删除、新增和数据类型修改中的任意一种或几种操作的变量。
可选的,所述确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息,得到第一变量内存信息,包括:
确定出初始化目标变量中已经发生了删除操作的第二变量和发生了新增操作的第三变量;
确定出所述初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存地址信息和内存大小信息,得到第一变量内存信息。
可选的,所述获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,包括:
获取当前所述新内存中与发生了删除操作的所述第二变量对应的删除空闲区;
判断所述删除空闲区所占的内存大小是否小于所述第三变量对应的内存大小,若小于则将部分所述第三变量分配至所述删除空闲区,并将其余部分所述第三变量分配至所述新内存中的剩余空闲区,若不小于则将全部所述第三变量分配至所述删除空闲区。
可选的,所述内存管理方法,还包括:
当监测到当前所述控制器中的内存数据发生了变量数据类型修改操作时,则确定出与所述发生了变量数据类型修改操作对应的第四变量;
相应的,所述获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,还包括:
根据所述变量数据类型修改操作对所述新内存中的所述第四变量的数据类型进行修改,并为修改后的所述第四变量重新分配内存。
可选的,所述进行初始化处理,包括:
通过对所述增量变量和所述第一变量的内存配置信息进行编辑生成相应的工程组态数据,并通过编译将所述工程组态数据下装到所述控制器。
第二方面,本申请公开了一种内存管理装置,包括:
变量确定模块,用于当监测到正在运行的控制器中的内存数据发生变化时,则确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息,得到第一变量内存信息;
内存创建模块,用于创建与所述控制器等量的新内存,并根据所述第一变量内存信息将所述第一变量回填至所述新内存中;
内存地址分配模块,用于获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,再进行初始化处理。
第三方面,本申请公开了一种电子设备,包括处理器和存储器;其中,所述处理器执行所述存储器中保存的计算机程序时实现前述的内存管理方法。
第四方面,本申请公开了一种计算机可读存储介质,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现前述的内存管理方法。
可见,本申请当监测到正在运行的控制器中的内存数据发生变化时,则确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息得到第一变量内存信息,然后创建与所述控制器等量的新内存,并根据所述第一变量内存信息将所述第一变量回填至所述新内存中,最后获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,再进行初始化处理。可见,本申请基于增量的内存管理方式来管理控制器中的内存,在不改变其它变量内存地址和运行状态的情况,实现变化的变量数据的有效内存分配,达到无扰增量分配内存地址,即在不影响控制器正常运行的前提下实现控制器中内存的在线修改维护。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种内存管理方法流程图;
图2为本申请公开的一种具体的初始化编译分配内存示意图;
图3为本申请公开的一种具体的内存管理方法流程图;
图4为本申请公开的一种具体的编译分配内存示意图;
图5为本申请公开的一种具体的编译分配内存示意图;
图6为本申请公开的一种内存管理装置结构示意图;
图7为本申请公开的一种电子设备结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例公开了一种内存管理方法,参见图1所示,该方法包括:
步骤S11:当监测到正在运行的控制器中的内存数据发生变化时,则确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息,得到第一变量内存信息。
本实施例中,实时的对正在运行的控制器的内存数据进行监测,当监测到所述控制器的内存数据发生变化时,则进一步的确定出具体是由哪些内存数据所引起的,即确定出所述控制器中已经发生了变化的增量变量,并对未发生变化的变量进行采集得到所述第一变量,然后对上述第一变量的内存信息进行记录,得到所述第一变量内存信息。其中,所述第一变量内存信息包括但不限于所述第一变量在所述控制器中的内存地址信息,即所述第一变量位于所述控制器内存中的位置,和所述第一变量的内存大小信息等;所述增量变量包括发生了删除、新增和数据类型修改中的任意一种或几种操作的变量,即将所述控制器内存中删除的变量、新增的变量及数据类型发生了修改的变量作为所述增量变量。
本实施例中,所述初始化目标变量的获取过程,具体可以包括:获取所述控制器中目标数据区的所有变量,并通过编译对所述所有变量进行初始化分配内存地址,以得到所述初始化目标变量。例如,参见图2所示,首先对控制器G区,即所述目标区域,中的所有变量进行收集,得到变量A、变量B、变量C、变量D、变量E、变量F、变量G、变量H、变量I、变量J,然后通过编译对上述变量A至变量J这十个变量进行初始化分配内存地址,然后按照上述初始化分配的内存地址对上述十个变量进行有序的排列,得到如图2所示的从变量A至变量J的有序排列,并且所述G区中还包括未使用的空闲区。
步骤S12:创建与所述控制器等量的新内存,并根据所述第一变量内存信息将所述第一变量回填至所述新内存中。
本实施例中,当监测到正在运行的控制器中的内存数据发生变化时,则确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息得到第一变量内存信息之后,模拟所述控制器创建与所述控制器内存大小相同的新内存,然后根据所述第一变量内存信息中记录的所述第一变量的内存地址信息和内存大小信息等信息将所述第一变量回填至上述新内存中,即将未发生变化的变量中的数值按照预设的顺序写入至所述新内存中。
步骤S13:获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,再进行初始化处理。
本实施例中,创建与所述控制器等量的新内存,并根据所述第一变量内存信息将所述第一变量回填至所述新内存中之后,确定出当前所述新内存中的空闲区,然后在所述空闲区中为发生了变量变化的所述增量变量重新分配内存地址,并按照所述重新分配的内存地址对所述增量变量进行有序排序,最后进行初始化处理。
本实施例中,所述进行初始化处理,具体可以包括:通过对所述增量变量和所述第一变量的内存配置信息进行编辑生成相应的工程组态数据,并通过编译将所述工程组态数据下装到所述控制器。可以理解的是,在根据所述控制器的内存资源为所述增量变量和所述第一变量配置了新的内存之后,可以通过编辑生成相应的工程组态数据,并通过编译将所述工程组态数据下装到所述控制器,从而实现在线更新所述控制器的程序。
可见,本申请实施例当监测到正在运行的控制器中的内存数据发生变化时,则确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息得到第一变量内存信息,然后创建与所述控制器等量的新内存,并根据所述第一变量内存信息将所述第一变量回填至所述新内存中,最后获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,再进行初始化处理。可见,本申请实施例基于增量的内存管理方式来管理控制器中的内存,在不改变其它变量内存地址和运行状态的情况,实现变化的变量数据的有效内存分配,达到无扰增量分配内存地址,即在不影响控制器正常运行的前提下实现控制器中内存的在线修改维护。
本申请实施例公开了一种具体的内存管理方法,参见图3所示,该方法包括:
步骤S21:当监测到正在运行的控制器中的内存数据发生变化时,则确定出初始化目标变量中已经发生了删除操作的第二变量和发生了新增操作的第三变量。
本实施例中,当监测到正在运行的控制器中的内存数据发生变化时,则进一步的确定出初始化目标变量中已经被删除的变量,得到所述第二变量,和所述初始化目标变量中新增的变量得到所述第三变量。
步骤S22:确定出所述初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存地址信息和内存大小信息,得到第一变量内存信息。
本实施例中,当监测到正在运行的控制器中的内存数据发生变化时,则确定出初始化目标变量中已经发生了删除操作的第二变量和发生了新增操作的第三变量之后,对上述初始化目标变量中未发生变化的第一变量进行采集,并记录未发生变化的上述第一变量的内存地址信息和内存大小信息得到所述第一变量内存信息。
步骤S23:创建与所述控制器等量的新内存,并根据所述第一变量内存信息将所述第一变量回填至所述新内存中。
步骤S24:获取当前所述新内存中与发生了删除操作的所述第二变量对应的删除空闲区。
本实施例中,创建与所述控制器等量的新内存,并根据所述第一变量内存信息将所述第一变量回填至所述新内存中之后,进一步的确定出当前所述新内存中与发生了删除操作的所述第二变量对应的删除空闲区。可以理解的是,由于此时的新内存中只包括第一变量,即只记录了未发生变化的变量,因此当上述初始化目标变量中存在被删除的变量时,则在所述新内存的对应位置上会出现与所述被删除的变量,即所述第二变量,对应的新的空闲区。
步骤S25:判断所述删除空闲区所占的内存大小是否小于所述第三变量对应的内存大小,若小于则将部分所述第三变量分配至所述删除空闲区,并将其余部分所述第三变量分配至所述新内存中的剩余空闲区,若不小于则将全部所述第三变量分配至所述删除空闲区。
本实施例中,获取当前所述新内存中与发生了删除操作的所述第二变量对应的删除空闲区之后,对获取到的上述删除空闲区进行判断,具体的,判断上述删除空闲区所占的内存大小是否小于上述第三变量对应的内存大小,如果上述删除空闲区所占的内存大小小于上述第三变量对应的内存大小,则可以将部分上述第三变量分配到所述删除空闲区,并将其余部分的未被分配的上述第三变量分配到所述新内存中的剩余空闲区;如果上述删除空闲区所占的内存大小不小于上述第三变量对应的内存大小,则可以将全部上述第三变量分配到所述删除空闲区。
参见图4所示,在一种具体的实施方式中,在图2的初始化目标变量的基础上删除了变量E和变量G之后,再新增变量K、变量L、变量M和变量N,并为上述新增的四个变量分配相应的存储空间。具体的,将图2中未发生变化的变量按照初始的内存位置及内存大小回填至模拟图2中G区创建的新内存中,即回填变量A、变量B、变量C、变量D、变量F、变量H、变量I、变量J至所述新内存中,然后判断新增的变量K、变量L、变量M和变量N的内存大小与删除的变量E和变量G的内存大小的关系;如果变量E的内存大小大于变量K的内存大小则将变量K分配至变量E的内存空间中,接着判断变量L的内存大小与变量E剩余内存大小的关系,如果变量L的内存大小大于变量E剩余内存大小则判断变量G的内存大小与变量L的内存大小关系,如果变量G的内存大小小于变量L的内存大小,则将变量L保存至图4所示的其余的空闲区中,进一步的判断变量M的E剩余内存大小的关系,如果变量M的内存大小小于变量E剩余内存大小则将变量M保存至变量E的剩余内存中;再判断所述变量N的内存大小与当前已经保存了变量K和变量M的变量E的剩余内存大小之间的关系,若小于则继续判断所述变量M的内存大小与保存了变量N到的变量G的剩余内存大小关系,若小于则将变量M保存至变量G相应的存储位置上。
步骤S26:当监测到当前所述控制器中的内存数据发生了变量数据类型修改操作时,则确定出与所述发生了变量数据类型修改操作对应的第四变量。
本实施例中,当再次监测到当前所述控制器中的内存数据发生了变量数据类型修改操作的新变化时,则对所述发生了变量数据类型修改操作对应的变量进行采集,得到所述第四变量。
步骤S27:根据所述变量数据类型修改操作对所述新内存中的所述第四变量的数据类型进行修改,并为修改后的所述第四变量重新分配内存,再进行初始化处理。
本实施例中,当监测到当前所述控制器中的内存数据发生了变量数据类型修改操作时,则确定出与所述发生了变量数据类型修改操作对应的第四变量之后,则可以根据上述变量数据类型修改操作对上述新内存中的所述第四变量的数据类型进行相应的修改,并为修改后的所述第四变量重新分配内存,最后进行初始化处理,即通过编译将生成的工程组态数据下装到所述控制器。
参见图5所示,在一种具体的实施例中,在图4的基础上将变量L的数据类型从4个字节修改为2个字节,将修改后的变量L的内存大小与当前新创建的内存中空闲区的内存大小进行比较,首先比较变量N与变量H之间的空闲区的内存大小是否大于2个字节,若不大于则表明在当前内存中,变量L之前的空闲区中没有足够的存储空间保存数据类型修改后的变量L,因此变量L的位置保存不变只对数据类型进行修改即可。
其中,关于上述步骤S23更加具体的处理过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
可见,本申请实施例在监测到控制器发生了变量删除、变量新增及变量数据类型修改的变化时,对变化的变量进行记录,并采集未发生变化的变量,然后通过模拟所述控制器创建新内存,将未发生变化的变量回填至所述新内存中,并为变化的变量分配新内存,从而实现了对变化的变量的有效内存分配,达到无扰增量分配内存地址。
相应的,本申请实施例还公开了一种内存管理装置,参见图6所示,该装置包括:
变量确定模块11,用于当监测到正在运行的控制器中的内存数据发生变化时,则确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息,得到第一变量内存信息;
内存创建模块12,用于创建与所述控制器等量的新内存,并根据所述第一变量内存信息将所述第一变量回填至所述新内存中;
内存地址分配模块13,用于获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,再进行初始化处理。
其中,关于上述各个模块的具体工作流程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
可见,本申请实施例中,当监测到正在运行的控制器中的内存数据发生变化时,则确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息得到第一变量内存信息,然后创建与所述控制器等量的新内存,并根据所述第一变量内存信息将所述第一变量回填至所述新内存中,最后获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,再进行初始化处理。可见,本申请实施例基于增量的内存管理方式来管理控制器中的内存,在不改变其它变量内存地址和运行状态的情况,实现变化的变量数据的有效内存分配,达到无扰增量分配内存地址,即在不影响控制器正常运行的前提下实现控制器中内存的在线修改维护。
在一些具体实施例中,所述内存管理装置,还可以包括:
初始化目标变量获取单元,用于获取所述控制器中目标数据区的所有变量,并通过编译对所述所有变量进行初始化分配内存地址,以得到所述初始化目标变量。
在一些具体实施例中,所述增量变量包括发生了删除、新增和数据类型修改中的任意一种或几种操作的变量。
在一些具体实施例中,所述变量确定模块11,具体可以包括:
第一变量确定单元,用于确定出初始化目标变量中已经发生了删除操作的第二变量和发生了新增操作的第三变量;
第二变量确定单元,用于确定出所述初始化目标变量中未发生变化的第一变量;
信息记录单元,用于记录所述第一变量的内存地址信息和内存大小信息,得到第一变量内存信息。
在一些具体实施例中,所述内存地址分配模块13,具体可以包括:
空闲区获取单元,用于获取当前所述新内存中与发生了删除操作的所述第二变量对应的删除空闲区;
判断单元,用于判断所述删除空闲区所占的内存大小是否小于所述第三变量对应的内存大小;
第一分配单元,用于如果所述删除空闲区所占的内存大小小于所述第三变量对应的内存大小,则将部分所述第三变量分配至所述删除空闲区,并将其余部分所述第三变量分配至所述新内存中的剩余空闲区;
第二分配单元,用于如果所述删除空闲区所占的内存大小不小于所述第三变量对应的内存大小,则将全部所述第三变量分配至所述删除空闲区。
在一些具体实施例中,所述内存管理装置,还可以包括:
第三变量确定单元,用于当监测到当前所述控制器中的内存数据发生了变量数据类型修改操作时,则确定出与所述发生了变量数据类型修改操作对应的第四变量;
相应的,所述获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,还可以包括:
数据类型修改单元,用于根据所述变量数据类型修改操作对所述新内存中的所述第四变量的数据类型进行修改,并为修改后的所述第四变量重新分配内存。
在一些具体实施例中,所述进行初始化处理,具体可以包括:
初始化单元,用于通过对所述增量变量和所述第一变量的内存配置信息进行编辑生成相应的工程组态数据,并通过编译将所述工程组态数据下装到所述控制器。
进一步的,本申请实施例还公开了一种电子设备,图7是根据一示例性实施例示出的电子设备20结构图,图中的内容不能认为是对本申请的使用范围的任何限制。
图7为本申请实施例提供的一种电子设备20的结构示意图。该电子设备20,具体可以包括:至少一个处理器21、至少一个存储器22、电源23、通信接口24、输入输出接口25和通信总线26。其中,所述存储器22用于存储计算机程序,所述计算机程序由所述处理器21加载并执行,以实现前述任一实施例公开的内存管理方法中的相关步骤。另外,本实施例中的电子设备20具体可以为电子计算机。
本实施例中,电源23用于为电子设备20上的各硬件设备提供工作电压;通信接口24能够为电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本申请技术方案的任意通信协议,在此不对其进行具体限定;输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
另外,存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,其上所存储的资源可以包括操作系统221、计算机程序222等,存储方式可以是短暂存储或者永久存储。
其中,操作系统221用于管理与控制电子设备20上的各硬件设备以及计算机程序222,其可以是Windows Server、Netware、Unix、Linux等。计算机程序222除了包括能够用于完成前述任一实施例公开的由电子设备20执行的内存管理方法的计算机程序之外,还可以进一步包括能够用于完成其他特定工作的计算机程序。
进一步的,本申请还公开了一种计算机可读存储介质,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现前述公开的内存管理方法。关于该方法的具体步骤可以参考前述实施例中公开的相应内容,在此不再进行赘述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本申请所提供的一种内存管理方法、装置、设备及存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种内存管理方法,其特征在于,包括:
当监测到正在运行的控制器中的内存数据发生变化时,则确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息,得到第一变量内存信息;
创建与所述控制器等量的新内存,并根据所述第一变量内存信息将所述第一变量回填至所述新内存中;
获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,再进行初始化处理。
2.根据权利要求1所述的内存管理方法,其特征在于,还包括:
获取所述控制器中目标数据区的所有变量,并通过编译对所述所有变量进行初始化分配内存地址,以得到所述初始化目标变量。
3.根据权利要求1所述的内存管理方法,其特征在于,所述增量变量包括发生了删除、新增和数据类型修改中的任意一种或几种操作的变量。
4.根据权利要求3所述的内存管理方法,其特征在于,所述确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息,得到第一变量内存信息,包括:
确定出初始化目标变量中已经发生了删除操作的第二变量和发生了新增操作的第三变量;
确定出所述初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存地址信息和内存大小信息,得到第一变量内存信息。
5.根据权利要求4所述的内存管理方法,其特征在于,所述获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,包括:
获取当前所述新内存中与发生了删除操作的所述第二变量对应的删除空闲区;
判断所述删除空闲区所占的内存大小是否小于所述第三变量对应的内存大小,若小于则将部分所述第三变量分配至所述删除空闲区,并将其余部分所述第三变量分配至所述新内存中的剩余空闲区,若不小于则将全部所述第三变量分配至所述删除空闲区。
6.根据权利要求5所述的内存管理方法,其特征在于,还包括:
当监测到当前所述控制器中的内存数据发生了变量数据类型修改操作时,则确定出与所述发生了变量数据类型修改操作对应的第四变量;
相应的,所述获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,还包括:
根据所述变量数据类型修改操作对所述新内存中的所述第四变量的数据类型进行修改,并为修改后的所述第四变量重新分配内存。
7.根据权利要求1至6任一项所述的内存管理方法,其特征在于,所述进行初始化处理,包括:
通过对所述增量变量和所述第一变量的内存配置信息进行编辑生成相应的工程组态数据,并通过编译将所述工程组态数据下装到所述控制器。
8.一种内存管理装置,其特征在于,包括:
变量确定模块,用于当监测到正在运行的控制器中的内存数据发生变化时,则确定出已经发生变化的增量变量和初始化目标变量中未发生变化的第一变量,并记录所述第一变量的内存信息,得到第一变量内存信息;
内存创建模块,用于创建与所述控制器等量的新内存,并根据所述第一变量内存信息将所述第一变量回填至所述新内存中;
内存地址分配模块,用于获取当前所述新内存中的空闲区,并在所述空闲区中为所述增量变量重新分配内存地址,再进行初始化处理。
9.一种电子设备,其特征在于,包括处理器和存储器;其中,所述处理器执行所述存储器中保存的计算机程序时实现如权利要求1至7任一项所述的内存管理方法。
10.一种计算机可读存储介质,其特征在于,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的内存管理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210017473.7A CN114356715A (zh) | 2022-01-07 | 2022-01-07 | 一种内存管理方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210017473.7A CN114356715A (zh) | 2022-01-07 | 2022-01-07 | 一种内存管理方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114356715A true CN114356715A (zh) | 2022-04-15 |
Family
ID=81107407
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210017473.7A Pending CN114356715A (zh) | 2022-01-07 | 2022-01-07 | 一种内存管理方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114356715A (zh) |
-
2022
- 2022-01-07 CN CN202210017473.7A patent/CN114356715A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7823023B2 (en) | Test framework for testing an application | |
JPH037972B2 (zh) | ||
CN107870802B (zh) | 一种虚拟机迁移方法和装置 | |
CN107291447B (zh) | 一种自动生成并发布sdk代码的方法 | |
US10614051B2 (en) | Method for operating an engineering system for an industrial process automation system, and control program | |
CN111309303B (zh) | 代码生成方法、装置、计算机设备和存储介质 | |
CN113419672B (zh) | 一种存储容量管理方法、系统及存储介质 | |
CN111142466A (zh) | 工程装置、工程装置的控制方法和存储介质 | |
CN114356715A (zh) | 一种内存管理方法、装置、设备及存储介质 | |
CN109933345B (zh) | 一种控制器的无扰下装方法及相关装置 | |
CN111782628A (zh) | 电力系统实时库动态扩充增量的方法、配置工具和系统 | |
EP3971660A1 (en) | Method and system for providing engineering of an industrial device in a cloud computing environment | |
CN115061813A (zh) | 集群资源的管理方法、装置、设备及介质 | |
CN113821219A (zh) | 一种实现应用程序容器化的方法及系统 | |
CN112214501A (zh) | 用于利用序列库的模块工程化的系统和方法 | |
CN110971665A (zh) | 一种对接多类型存储的管理方法、系统、设备及存储介质 | |
US7743244B2 (en) | Computer system model generation with tracking of actual computer system configuration | |
Karpagavalli et al. | Strategy tree and fuzzy based cloud SLA change management | |
CN115604101B (zh) | 系统管理方法及相关设备 | |
CN110609698B (zh) | 控制算法单元在线升级方法及装置 | |
CN115390876A (zh) | 虚拟机qemu程序热升级方法、装置和设备 | |
CN115421780A (zh) | 应用程序的开发方法及相关设备 | |
CN113986300A (zh) | 智能合约的部署方法及装置、电子设备、存储介质 | |
CN117521079A (zh) | 基于SE芯片的Applet应用升级方法、系统及设备 | |
CN117591187A (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 |