CN110413401A - 管理全局对象内存的方法、存储介质、电子设备及系统 - Google Patents
管理全局对象内存的方法、存储介质、电子设备及系统 Download PDFInfo
- Publication number
- CN110413401A CN110413401A CN201810403703.7A CN201810403703A CN110413401A CN 110413401 A CN110413401 A CN 110413401A CN 201810403703 A CN201810403703 A CN 201810403703A CN 110413401 A CN110413401 A CN 110413401A
- Authority
- CN
- China
- Prior art keywords
- function
- memory
- global object
- triggering
- program
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明公开了一种管理全局对象内存的方法、存储介质、电子设备及系统,其涉及内存管理领域,该方法包括定义内存分配函数,在内存分配函数中插入第一触发函数,所述第一触发函数在创建全局对象时触发并调用存储函数,所述存储函数存储内存分配函数为全局对象所分配的内存地址或指针;创建第二触发函数,所述第二触发函数在程序模块退出时触发并调用内存释放函数,所述内存释放函数读取存储函数存储的内存地址或指针并释放全局对象所占的内存。本发明能够实时记录程序员或程序定义的全局对象,并在程序结束后释放全局对象占用的内存。
Description
技术领域
本发明涉及内存管理领域,具体涉及一种管理全局对象内存的方法、存储介质、电子设备及系统。
背景技术
当硬盘中的程序需要运行时候,其程序将逻辑运算首先提取至内存供其他设备快速的读取以及转化。在CPU、GPU等等设备进行运算时,其读取内存的数据,并将运算的结果存储在内存中。而当多个程序同时运行的时候,多个程序将同时占用内存,空间上不同的程序占用的内存大小不同,程序使用内存的时间段也不同。当内存不足以支持更多的程序运行时候,程序将自行进行排队,等待其他程序运行结束后再开始运行。而这样的等待将浪费部分时间,具体表现为设备处理速度低下,性能不足。而当一个程序占用另一个程序使用的内存后,另一程序将由于内存数据丢失或者不全而崩溃或无法运行。因此,每个程序占用内存的大小、方式以及时间对计算机运行各个程序的性能有较大的影响。
在程序的开发以及运行过程中,程序员或程序自身常常定义很多对象,这些对象在程序运行时候都将存储于内存,即占用内存,而当程序较复杂时候,程序需求更多的对象,占用更大的内存空间,要求更长的内存使用时长。如果程序只申请内存,不释放不再使用的内存最终会导致内存被完全占用,而程序因为无其他空余内存而无法继续运行而崩溃;如果程序在使用内存后立即释放,则将频繁的存储以及读取内存,程序将因为部分从程序开始至结束都运行的数据则在存储、读取以及释放中浪费过多的时间。
为了解决上述问题,程序员对程序中定义的对象进行了区分,程序始终使用的对象为全局对象/静态对象,在程序运行中不再使用即释放内存即删除,而是一直存储于内存中直到程序结束。当程序较复杂的时候,则需要定义较多的全局对象,因此也需要程序员或程序对这些全局对象进行管理。
然而常见的管理全局对象的方式在需要手动释放全局对象所占用的内存的时候,可能漏掉部分全局对象,从而造成程序内存泄露。程序内存泄露轻则影响程序性能,重则导致程序崩溃无法正常运行。因此亟须一种方法、电子设备、存储介质或系统,能够帮助程序员对定义的全局对象进行全面的管理。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种管理全局对象内存的方法、存储介质、电子设备及系统,能够实时记录程序员或程序定义的全局对象,并在程序结束后释放全局对象占用的内存。
为达到以上目的,本发明采取的技术方案是:
一种管理全局对象内存的方法,其包括:
定义内存分配函数,在内存分配函数中插入第一触发函数,所述第一触发函数在创建全局对象时触发并调用存储函数,所述存储函数存储内存分配函数为全局对象所分配的内存地址或指针;
创建第二触发函数,所述第二触发函数在程序模块退出时触发并调用内存释放函数,所述内存释放函数读取存储函数存储的内存地址或指针并释放全局对象所占的内存。
在上述技术方案的基础上,在C++/C#语言下,重新定义new函数,创建全局对象时触发OnObjectCreated函数,所述OnObjectCreated函数在触发后调用存储函数,程序模块退出时触发AtExitManager函数,所述AtExitManager函数在触发后调用内存释放函数。
在上述技术方案的基础上,使用RegisterCallback函数存储内存分配函数为全局对象所分配的内存地址或指针,使用DeleteAllObject函数释放内存。
在上述技术方案的基础上,使用C++/C#语言下的SetWindowsHootEx函数重新定义所述内存分配函数。
一种存储介质,该存储介质上存储有计算机程序:所述计算机程序被处理器执行时实现上述的方法。
一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序:所述处理器执行所述计算机程序时实现上述的方法。
一种管理全局对象内存的系统,其包括:
记录模块,所述记录模块用于定义内存分配函数,在内存分配函数中插入第一触发函数,所述第一触发函数在创建全局对象时触发并调用存储函数,所述存储函数存储内存分配函数为全局对象所分配的内存地址或指针;
释放模块,所述释放模块用于创建第二触发函数,所述第二触发函数在程序模块退出时调用内存释放函数,所述内存释放函数读取存储函数存储的内存地址或指针并释放全局对象所占的内存。
在上述技术方案的基础上,C++/C#语言下,所述内存分配函数为的new函数,所述第一触发函数为OnObjectCreated函数,,所述OnObjectCreated函数在触发后调用存储函数,所述第二触发函数为AtExitManager函数,所述AtExitManager函数在触发后调用内存释放函数。
在上述技术方案的基础上,所述存储函数为RegisterCallback函数,所述内存释放函数为DeleteAllObject函数。
在上述技术方案的基础上,C++/C#语言下,重新定义所述内存分配函数的函数为SetWindowsHootEx函数。
与现有技术相比,本发明的优点在于:
(1)本发明一种管理全局对象内存的方法、存储介质、电子设备及系统使用第一触发函数,能够在程序员或程序定义全局对象时候触发,即自动监听所有全局对象创建,并进行存储管理,并在程序结束之前触发第二触发函数,将全局对象所占用的内存进行释放,保证了程序员或程序的中特定全局对象都能够及时得到释放。
(2)本发明一种管理全局对象内存的方法、存储介质、电子设备及系统在C++/C#语言下重新定义函数new,使得程序员或程序在使用函数new定义全局对象时候均能够记录使用的内存空间。
(3)本发明一种管理全局对象内存的方法、存储介质、电子设备及系统使用OnObjectCreated函数作为第一触发函数,能够在全局对象建立时调用其他函数,保证了全局对象初始化占用内存的时候,能够实时记录。
(4)本发明一种管理全局对象内存的方法、存储介质、电子设备及系统使用AtExitManager函数作为第二触发函数能够在程序退出时及时的调用其他函数将程序使用全局对象所占用的内存释放,保证了程序的稳定性以及安全性。
(5)本发明一种管理全局对象内存的方法、存储介质、电子设备及系统使用RegisterCallback函数使得内存在使用时能够实时记录;DeleteAllObject函数使得在程序结束时,能够及时释放内存。
附图说明
图1为本发明一种管理全局对象内存的方法实施例的流程图;
图2为本发明一种管理全局对象内存的系统的结构示意图。
具体实施方式
以下结合附图对本发明的实施例作进一步详细说明。
参见图1所示,本发明实施例提供一种管理全局对象内存的方法,包括如下步骤:
S1、定义内存分配函数;
S2、在该内存分配函数中插入第一触发函数,所述第一触发函数在创建全局对象时,会触发并调用存储函数,该存储函数能够存储被定义的内存分配函数为全局对象所分配的内存地址或指针。
S3、创建第二触发函数,该第二触发函数在程序模块退出时触发,并调用内存释放函数,该内存释放函数读取存储函数存储的内存地址或指针并释放全局对象所占的内存。
在使用本管理全局对象内存的方法后,即上述步骤完成后,程序在开始运行时,其每一次使用内存分配函数创建全局对象,第一触发函数会被触发,被触发的第一函数将会调用存储函数,该存储函数能够在内存分配函数初始化全局对象,并为全局对象分配内存地址或创建指针时候,获取其分配的内存地址或指针并进行存储。因此,每当程序需要使用内存分配函数创建新的全局对象,存储函数都能够对应的进行记录,保证了程序使用内存能够进行记录,且对程序的运行无较大的影响。当程序运行完毕,进入退出状态时候,将会触发第二触发函数,而第二触发函数在被触发后会调用内存释放函数,该内存释放函数将会读取存储函数所在的内存地址或指针,并释放内存。而在从该程序开始使用内存分配函数开始直至程序结束这个时间段,存储函数是都会对其分配的内存进行记录的,因此在需要释放内存时候,内存释放函数能够将所记录到的所有全局对象所占用的内存进行释放。本方法能够有效防止了内存泄露、野指针的出现或者程序的崩溃,具有较高安全性和稳定性。同时对程序的更改仅仅针对内存分配函数,对程序影响小,且对程序内存释放更全面及安全。
需要说明的是,步骤S1中的“定义内存分配函数”可以是根据程序的需要,定义一个新的内存分配函数供程序使用,也可以是对程序运行使用的已经存在的内存分配函数,即,对程序、平台、系统上已有的内存分配函数重新定义、修改。只要是程序使用到的关于内存分配函数均可。
可选的,部分语言中程序通过不同内存分配函数对全局对象的内存进行分配,其中部分函数以及较为固定且完整了,另一部分函数属于对程序中特殊全局对象进行定义或者部分情况下进行全局对象进行定义等等,在这些情况下的全局对象在内存释放时候需要手动或者改进该部分函数的自动释放部分。本管理全局对象内存的方法在针对这部分函数使用时,能够有效的针对这些情况记录并释放内存,防止内存泄露、野指针的出现或者程序崩溃。
优选的,对应C++/C#语言下,对new函数重新进行定义,并创建OnObjectCreated函数,OnObjcectCreated函数为一个回调函数,其使得程序每次调用new函数定义全局对象时候,都将触发OnObjectCreated函数,OnObjectCreated函数在触发后将调用存储函数。从而进行后续步骤,同理,创建AtExitManager函数,该函数在程序或者程序模块退出时候触发,并在触发后调用内存释放函数。在C++/C#语言下,程序在对程序中特殊全局对象进行定义或者部分情况下进行全局对象进行定义等等情况下,常常使用new函数进行全局对象的定义,在使用本方法对new函数重新定义后,如果程序由于编译等问题没有对new函数分配的全局变量所使用的内存进行示范,本方法会对其使用的内存进行释放,从而避免了内存的泄露以及野指针的出现,进而避免了其对其他、后续程序或程序模块的干扰,最终导致程序崩溃或者系统死机。需要说明的是,其中OnObjectCreated函数和AtExitManager函数可以是C++/C#语言下固有的函数,可以是系统环境自带函数,也可以由编写人员自行编写,只要能够进行上述的触发功能即可。优选的,AtExitManager是管理全局对象的一个类,且是一个局部变量的类,主要功能是保存全局对象的内存地址指针,在程序退出时,AtExitManager解析,将删除全局对象的内存指针,即达到删除内存指针的目的。
可选的,使用RegisterCallback函数存储内存分配函数为全局对象所分配的内存地址或指针,使用DeleteAllObject函数释放内存。其中RegisterCallback函数和DeleteAllObject函数可以是C++/C#语言下固有的函数,可以是系统环境自带函数,也可以由编写人员自行编写,只要能够进行上述的触发功能即可。优选的,RegisterCallback是AtExitManager类中的一个函数,是通过调用它来保存全局对象的内存地址,保存在一个数据容器里。DeleteAllObject函数是AtExitManager类中的一个函数,能够删除所有保存在AtExitManager类中的内存;当程序退出时,DeleteAllObject函数删除RegisterCallback存储的内存地址,而AtExitManager类存储的内存指针自动释放,达到了释放内存的目的。
优选的,在对new函数进行重新定义的时候,可以使用windows系统自带的SetWindowsHootEx函数进行,该函数windows系统中已经存在,省去了程序员重新编写和调试的时间更加效率,同时作为C++/C#语言环境中已有的函数,运行更加稳定。
此外,对应上述管理全局对象内存的方法,本发明还提供一种存储介质,存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述各实施例所述的定时器设置方法的步骤。需要说明的是,所述存储介质包括U盘、移动硬盘、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、磁碟或者光盘等各种可以存储程序代码的介质。
另外,对应上述管理全局对象内存的方法,本发明还提供一种电子设备,该电子设备存储有计算机程序,计算机程序被处理器执行时实现上述各实施例所述的定时器设置方法的步骤。需要说明的是,所述电子设备包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例的稳步移动端显示方法。
如图2所示,本发明实施例还提供一种管理全局对象内存的系统,包括记录模块和释放模块。
记录模块能够定义内存分配函数,在内存分配函数中插入第一触发函数,该第一触发函数在创建全局对象的时候,触发并调用储存函数,该存储函数存储内存分配函数为全局对象分配的内存地址或指针。
释放模块能够创建第二触发函数,该第二触发函数在程序块退出时将调用内存释放函数,内存释放函数在被调用后读取存储函数存储的内存地址或指针并释放全局对象所占的内存。
程序或者程序模块在使用上述两个模块后,能够更加全面的记录全局对象所使用的内存,并通过这两个模块更加有效的释放全局对象所占用的内存,从而保证内存不会泄露、野指针不会出现,使得程序或者程序模块更加稳定和安全。
可选的,记录模块针对的内存分配函数为一些语言下比较容易出现内存泄露和野指针出现的函数,如C++/C#语言下的new函数,且设置第一触发函数为OnObjectCreated函数,第二触发函数为AtExitManager函数,该OnObjectCreated函数在触发后调用存储函数,该AtExitManager函数在触发后调用内存释放函数。
进一步的,存储函数为RegisterCallback函数,所述内存释放函数为DeleteAllObject函数。
更进一步的,C++/C#语言下,重新定义所述new函数的函数为SetWindowsHootEx函数。
本发明实施例提供的一种管理全局对象内存的方法、存储介质、电子设备及系统,通过对程序、程序模块中能够对全局对象进行内存分配的内存分配函数进行重新定义,使得其在每次使用该函数时候触发并监控其分配的内存地址或指针,最终在程序或者程序模块退出时帮助释放所有监控到的内存地址或指针,达到有效防止了内存泄露、野指针的出现或者程序的崩溃,具有较高安全性和稳定性。同时对程序的更改仅仅针对内存分配函数,对程序影响小,且对程序内存释放更全面及安全。
本发明不仅局限于上述最佳实施方式,任何人在本发明的启示下都可得出其他各种形式的产品,但不论在其形状或结构上作任何变化,凡是具有与本发明相同或相近似的技术方案,均在其保护范围之内。
Claims (10)
1.一种管理全局对象内存的方法,其特征在于,其包括:
定义内存分配函数,在内存分配函数中插入第一触发函数,所述第一触发函数在创建全局对象时触发并调用存储函数,所述存储函数存储内存分配函数为全局对象所分配的内存地址或指针;
创建第二触发函数,所述第二触发函数在程序模块退出时触发并调用内存释放函数,所述内存释放函数读取存储函数存储的内存地址或指针并释放全局对象所占的内存。
2.如权利要求1所述的一种管理全局对象内存的方法,其特征在于:在C++/C#语言下,重新定义new函数,创建全局对象时触发OnObjectCreated函数,所述OnObjectCreated函数在触发后调用存储函数,程序模块退出时触发AtExitManager函数,所述AtExitManager函数在触发后调用内存释放函数。
3.如权利要求2所述的一种管理全局对象内存的方法,其特征在于:使用RegisterCallback函数存储内存分配函数为全局对象所分配的内存地址或指针,使用DeleteAllObject函数释放内存。
4.如权利要求3所述的一种管理全局对象内存的方法,其特征在于:使用C++/C#语言下的SetWindowsHootEx函数重新定义所述内存分配函数。
5.一种存储介质,该存储介质上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现权利要求1至4任一项所述的方法。
6.一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,其特征在于:所述处理器执行所述计算机程序时实现权利要求1至4任一项所述的方法。
7.一种管理全局对象内存的系统,其特征在于,其包括:
记录模块,所述记录模块用于定义内存分配函数,在内存分配函数中插入第一触发函数,所述第一触发函数在创建全局对象时触发并调用存储函数,所述存储函数存储内存分配函数为全局对象所分配的内存地址或指针;
释放模块,所述释放模块用于创建第二触发函数,所述第二触发函数在程序模块退出时调用内存释放函数,所述内存释放函数读取存储函数存储的内存地址或指针并释放全局对象所占的内存。
8.如权利要求7所述的一种全局对象内存的系统,其特征在于:C++/C#语言下,所述内存分配函数为的new函数,所述第一触发函数为OnObjectCreated函数,,所述OnObjectCreated函数在触发后调用存储函数,所述第二触发函数为AtExitManager函数,所述AtExitManager函数在触发后调用内存释放函数。
9.如权利要求8所述的一种管理全局对象内存的系统,其特征在于:所述存储函数为RegisterCallback函数,所述内存释放函数为DeleteAllObject函数。
10.如权利要求9所述的一种管理全局对象内存的系统,其特征在于:C++/C#语言下,重新定义所述内存分配函数的函数为SetWindowsHootEx函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810403703.7A CN110413401A (zh) | 2018-04-28 | 2018-04-28 | 管理全局对象内存的方法、存储介质、电子设备及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810403703.7A CN110413401A (zh) | 2018-04-28 | 2018-04-28 | 管理全局对象内存的方法、存储介质、电子设备及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110413401A true CN110413401A (zh) | 2019-11-05 |
Family
ID=68357133
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810403703.7A Pending CN110413401A (zh) | 2018-04-28 | 2018-04-28 | 管理全局对象内存的方法、存储介质、电子设备及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110413401A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103294588A (zh) * | 2012-02-22 | 2013-09-11 | 深圳富泰宏精密工业有限公司 | 内存检测系统及方法 |
CN106407031A (zh) * | 2016-09-14 | 2017-02-15 | 华为数字技术(成都)有限公司 | 一种内存泄露定位方法及电子设备 |
CN106610892A (zh) * | 2015-10-23 | 2017-05-03 | 腾讯科技(深圳)有限公司 | 内存泄漏检测方法和装置 |
-
2018
- 2018-04-28 CN CN201810403703.7A patent/CN110413401A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103294588A (zh) * | 2012-02-22 | 2013-09-11 | 深圳富泰宏精密工业有限公司 | 内存检测系统及方法 |
CN106610892A (zh) * | 2015-10-23 | 2017-05-03 | 腾讯科技(深圳)有限公司 | 内存泄漏检测方法和装置 |
CN106407031A (zh) * | 2016-09-14 | 2017-02-15 | 华为数字技术(成都)有限公司 | 一种内存泄露定位方法及电子设备 |
Non-Patent Citations (2)
Title |
---|
CHITU3082: "c++ ios_base register_callback方法使用", 《CSDN》 * |
SUNDEBING: "资源释放堆栈", 《CSDN》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103092700B (zh) | 内存清理方法、装置和终端设备 | |
CN104808952B (zh) | 数据缓存方法及装置 | |
CN109885343A (zh) | 一种控制器低功耗启动方法、装置、计算机设备及存储介质 | |
CN106020976B (zh) | 将内存耗尽处理流程卸载到用户空间的方法和装置 | |
CN104657435B (zh) | 一种应用数据的存储管理方法和网络管理系统 | |
CN103714016A (zh) | 缓存的清理方法、装置及客户端 | |
CN101261593A (zh) | 启用状态保存的方法和系统 | |
CN111124643A (zh) | 一种分布式存储中的删除任务调度方法、系统及相关装置 | |
US8296119B2 (en) | Saving and restarting discrete event simulations | |
US11947947B2 (en) | Automatic probabilistic upgrade of tenant devices | |
CN104156226B (zh) | 混合内存设备的挂起或关机方法 | |
CN105739982B (zh) | 一种系统休眠的方法及装置 | |
CN107391199A (zh) | 应用启动方法及装置、终端和计算机可读存储介质 | |
CN102073553A (zh) | 一种文件恢复的方法和装置 | |
CN103617129A (zh) | 一种内存处理的方法及装置 | |
CN110413401A (zh) | 管理全局对象内存的方法、存储介质、电子设备及系统 | |
CN105740170B (zh) | 一种缓存脏页刷写方法及装置 | |
US6681263B1 (en) | Control of software object lifetime | |
CN109634826A (zh) | 控制器极限性能分析方法、装置、计算机设备及存储介质 | |
CN105607727B (zh) | 一种信息显示方法、装置及电子设备 | |
CN109460411A (zh) | 一种基于hive的数据老化方法、装置及设备 | |
CN115718732A (zh) | 一种磁盘文件管理方法、装置、设备及存储介质 | |
CN115437572A (zh) | 一种数据落盘方法、装置、设备及介质 | |
CN104102324B (zh) | 管理移动设备内存的方法、服务器及计算机可读介质 | |
CN108874318A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20191105 |
|
RJ01 | Rejection of invention patent application after publication |