CN100361094C - 一种节省全局变量内存空间的方法 - Google Patents
一种节省全局变量内存空间的方法 Download PDFInfo
- Publication number
- CN100361094C CN100361094C CNB2005100804422A CN200510080442A CN100361094C CN 100361094 C CN100361094 C CN 100361094C CN B2005100804422 A CNB2005100804422 A CN B2005100804422A CN 200510080442 A CN200510080442 A CN 200510080442A CN 100361094 C CN100361094 C CN 100361094C
- Authority
- CN
- China
- Prior art keywords
- global
- memory
- internal memory
- variable
- control table
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Memory System (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种节省全局变量内存空间的方法。该方法的过程包括:设置记录待使用全局变量信息的全局变量内存控制表,并分配内存空间保存所述全局变量内存控制表;为上一步骤所述全局变量赋值并分配内存空间保存赋值后的全局变量,在全局变量内存控制表中记录所保存的全局变量的内存地址和大小。本发明的这种方法利用全局变量内存控制表来记录全局变量的内存使用情况,通过减少不必要的内存闲置和浪费,实现了内存资源的合理配置。
Description
技术领域
本发明涉及内存使用技术,尤指一种节省全局变量内存空间的方法。
背景技术
全局变量是在程序的整个执行过程中始终占用预先设定好的内存空间的一种变量,程序执行中的每个步骤都能通过访问全局变量占用的内存空间来赋值或使用该全局变量,在程序中对全局变量进行操作的方法如下:
首先,预先设置全局变量的数据类型,并在程序初始化时为所设置的全局变量分配内存空间;然后,程序在执行过程中读/写保存在内存空间的全局变量;最后,程序执行完毕释放该全局变量所占用的内存空间。
该方法中,程序根据全局变量预设的数据类型来分配内存空间,即使在程序执行过程中的某些时候,该全局变量并没有被赋值,也始终占用同样大小的内存空间。
这种方法的缺点是:不能根据程序运行过程中全局变量的赋值情况,动态地改变全局变量占用的内存空间。该缺点典型地反映在结构体数组等占用内存较大的全局变量上。实际应用中,经常会在程序刚开始时就设置一个很大的结构体数组全局变量,并开辟预设大小的内存空间。可是程序刚开始执行过程中,全局变量的所有数组成员不会都被赋值,对于尚未赋值的数组成员而言,为其分配的内存空间处于闲置状态,这就造成一定程度的内存浪费。
对于基站单板等设备而言,其内存资源有限。随着需求的不断增多,单板上运行程序的复杂度越来越高,程序中不得不使用的全局变量越来越多,这种内存消耗将成为制约单板程序进一步发展的瓶颈。
发明内容
有鉴于此,本发明的主要目的在于提供一种节省全局变量内存空间的方法,减少不必要的内存闲置和浪费,对内存资源加以合理利用。
为达到上述目的,本发明的技术方案具体是这样实现的:
一种节省全局变量内存空间的方法,其特征在于,该方法包括以下步骤:
a、设置记录待使用全局变量信息的全局变量内存控制表,并分配内存空间保存所述全局变量内存控制表;
b、为步骤a所述全局变量赋值并分配内存空间保存赋值后的全局变量,在全局变量内存控制表中记录所保存的全局变量的内存地址和大小。
进一步地,步骤b具体为:
b1、设置与所述全局变量具有相同数据类型的临时变量,将为所述全局变量生成的值保存在临时变量分配到的内存空间中;
b2、压缩临时变量内存空间中的数据,根据压缩结果进行保存,并用所保存数据内容的内存地址和大小更新全局变量内存控制表中的信息。
较佳地,步骤b2所述根据压缩结果保存的方法为:比较压缩前后数据占用的内存大小,保存占用内存小的数据内容。
进一步地,步骤b2所述保存的方法具体为:读取全局变量内存控制表中记录的该全局变量占用的内存大小,与压缩前后占用内存小的数据占用的内存大小进行比较,如果二者相等,则将占用内存小的数据保存到全局变量内存控制表所记录的该全局变量的内存地址处,否则释放该内存地址对应的内存空间,并重新分配占用内存小的数据所占用的内存空间保存所述占用内存小的数据。
较佳地,步骤b2所述的压缩采用无损压缩算法。
步骤b2之后,该方法进一步包括:使用所述全局变量时,通过全局变量名查找全局变量内存控制表,从全局变量内存控制表所记录的内存地址处取出相应的数据进行解压,然后使用解压后的全局变量。
进一步地,所述全局变量为结构体数组全局变量;
步骤a中设置的全局变量内存控制表包括:记录数组成员个数和单个数组成员大小的表头,以及记录相应数组成员内存地址和大小的数组成员表项。
进一步地,步骤b所述记录内存地址和大小的方法为:在全局变量内存控制表中查找到结构体数组全局变量中的数组成员对应的数组成员表项,并将保存该数组成员数据内容的内存地址和大小记录到对应的数组成员表项中。
由上述技术方案可见,本发明的这种节省全局变量内存空间的方法,通过全局变量内存控制表控制全局变量的内存使用情况,当全局变量未被赋值时,仅在全局变量内存控制表中保留该全局变量的索引表项,而不实际分配内存空间。当全局变量被赋值后,采用压缩方式保存,并通过全局变量内存控制表记录用于保存该全局变量的内存地址和占用的内存大小,以便在使用该全局变量时能够取出正确的数据进行解压。该方法根据程序对全局变量的访问情况动态改变为该全局变量分配的内存空间,从而减少不必要的内存闲置和浪费,实现了内存资源的合理利用。
附图说明
图1为本发明一个较佳实施例中为全局变量分配内存空间的方法流程图;
图2为本发明一个较佳实施例中对全局变量进行赋值操作的流程图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
本发明这种节省全局变量内存空间的方法在全局变量未被赋值前,不预先分配内存空间,仅通过全局变量内存控制表中的索引表项记录该全局变量,在全局变量被赋值后,先压缩全局变量数据,再分配压缩后数据大小的内存空间加以保存,从而达到节约内存空间的目的。
图1具体说明为该全局变量分配内存空间的过程,假设本实施例中的结构体数组全局变量共有1000个数组成员,如果不采用本发明的方法,每个数组成员会始终占用100个字节,但采用本发明的方法则会大大减少每个数组成员占用的空间。具体来说,本实施例中分配内存空间的过程包括:
步骤101、为结构体数组全局变量设置全局变量指针和全局变量内存控制表。
所述指针变量用于设定该全局变量的数组成员个数和单个数组成员大小。
所述全局变量内存控制表包括:表头和表项数组。其中,表头用于记录该结构体数组全局变量的数组成员个数和数组成员大小,将占用8个字节;表项数组的每一项与该结构体数组全局变量的每一项一一对应,用于记录相应数组成员分配到的内存大小和保存该数组成员的内存地址,每项将占用8个字节,所以本实施例中的全局变量内存控制表占用约8K大小的内存空间。
步骤102、初始化时根据预先设置为全局变量内存控制表分配内存空间。
具体包括:
1、通过调用系统的内存分配函数,为全局变量内存控制表分配所需的内存空间,并将所分配的内存空间清零。
2、将全局变量指针指向全局变量内存控制表,根据指针变量设定的数组成员个数和数组成员大小,设置全局变量内存控制表的表头。
步骤103、在对结构体数组全局变量中的一个或多个数组成员进行赋值后,对所获得的数组成员的数据结构进行压缩,并在压缩后数据大小比压缩前减少的情况下,按压缩后的大小分配内存空间保存,然后在全局变量内存控制表的表项中记录相应数组成员压缩后的大小以及内存地址。
上述为结构体数组全局变量中的某个数组成员赋值的操作如图2所示,具体执行如下:
步骤1031、设置一个与结构体数组全局变量中单个数组成员类型相同的临时结构体变量,并为该临时结构体变量分配内存空间,按照所设置的数据结构将为所述数组成员生成的值逐项赋予该临时结构体变量。
所述临时结构体变量在数组成员赋值过程中充当临时变量使用,该临时结构体变量占用100个字节。
步骤1032、压缩被赋值后的临时结构体变量并比较压缩前后数据大小,保存占用内存小的数据内容,并记录所保存的占用内存小的数据大小。
该步骤中,如果压缩后的数据大小大于压缩前,则将压缩前的数据保存到临时结构体变量中并记录压缩前的数据大小,否则将压缩后的数据保存到临时结构体变量中并记录压缩后的数据大小。
本步骤中,为了最大限度降低内存开销,应尽量采用最大压缩比的压缩算法,例如LZW、ZIP、RAR、ARJ、ASH、CC、Huffman等现有技术已有的压缩算法。一般情况下,为了保障数据压缩后的正确性,应选用无损压缩算法。
步骤1033、查找到数组成员在全局变量内存控制表中的相应表项,读取该表项中记录的数组成员内存大小和内存地址。
如果该数组成员属于初次赋值,内存大小和内存地址都为空,则调用系统的内存分配函数为该数组成员分配与步骤1032所述占用内存小的数据大小相同的内存空间,然后执行步骤1034。
如果该数组成员已分配空间,将步骤1032所述占用内存小的数据大小与表项中记录的内存大小比较,如果两个大小不等,则调用内存分配函数释放在先为该数组成员分配的内存空间,并重新分配占用内存小的数据大小的内存空间,然后执行步骤1034;如果两个大小相等,则直接执行步骤1034。
步骤1034、将临时结构体变量中的数据内容复制到该数组成员实际分配到的内存空间中,覆盖原先内容,并根据实际数据大小和实际内存地址修改该数组成员在全局变量内存控制表中的表项记录,使该数组成员的数据内容能够通过数组成员变量名访问,然后释放为步骤1031中所述临时结构体变量分配的内存空间,数组成员赋值操作完成。
假设在步骤1032中每个数组成员压缩后有30个字节,且所有数组成员都已经被赋值,则该结构体数组全局变量共占用30K大小的内存空间,那么采用本发明的方法为所述结构体数组全局变量分配的内存空间为38K。然而,使用现有技术的方法将有100K大小的内存空间始终被占用。通过两种方法的比较可以看出,本发明的方法大大节省内存空间。
由于步骤1031中仅定义单个数组成员大小的临时结构体变量,当需要为结构体数组全局变量中多个数组成员赋值时,只能逐一地为每个数组成员执行赋值操作,即赋值操作顺序执行。
若需同时对结构体数组全局变量进行赋值操作,可以在步骤1031中定义一个临时结构体数组变量作为临时变量,从而对整个结构体数组变量进行压缩保存。该方法在结构体数组全局变量被频繁访问的情况下,每次访问都要对整个结构体数组变量进行压缩或解压,故执行效率相对较低。
步骤104、在需要使用经过步骤103的操作保存在内存空间的结构体数组全局变量中一个或多个数组成员时,通过数组成员变量名查找全局变量内存控制表的相应表项,根据表项中记录的地址取出数据解压后使用。
使用结构体数组全局变量中的某个数组成员的操作具体执行如下:
首先,设置一个与结构体数组全局变量中的单个数组成员类型相同的临时结构体变量,并为临时结构体变量分配内存空间。
然后,通过数组成员变量名查找待使用数组成员在全局变量内存控制表中的表项,从上述表项中获知该数组成员所分配内存空间的地址和大小,如果该数组成员的表项为空,表明该数组成员未曾被赋值,则本次使用操作失败;否则,从相应地址处取出实际内存大小的数据,放置在为临时结构体变量分配的内存空间中。
最后,利用与步骤1032对应的压缩算法解压保存在临时结构体变量处的数据,并将解压后的结果保存在该临时结构体变量中供使用。
该步骤中,如果数组成员没有采用压缩保存,则无需解压即可使用。
上述方法适用于以简单数据类型或构造数据类型,比如结构体类型等具有较大压缩余地的类型,作为单个数组成员类型的数组全局变量,该数组全局变量的数组成员个数大于等于1,还适用于其它数据类型的全局变量,比如:链表、队列等。
本发明这种分配内存空间的方法除可以用于基站单板上之外,还可以用于手机、家电和汽车等具有内嵌CPU系统的领域,或者应用于希望在软件系统中节省内存开销的任何领域。
由上述的实施例可见,本发明的这种节省全局变量内存空间的方法,利用全局变量内存控制表控制全局变量的内存使用情况,通过减少不必要的内存闲置和浪费,实现了内存资源的合理利用。
Claims (8)
1、一种节省全局变量内存空间的方法,其特征在于,该方法包括以下步骤:
a、设置记录待使用全局变量信息的全局变量内存控制表,并分配内存空间保存所述全局变量内存控制表;
b、为步骤a所述全局变量赋值并分配内存空间保存赋值后的全局变量,在全局变量内存控制表中记录所保存的全局变量的内存地址和大小。
2、根据权利要求1所述的方法,其特征在于,步骤b具体为:
b1、设置与所述全局变量具有相同数据类型的临时变量,将为所述全局变量生成的值保存在临时变量分配到的内存空间中;
b2、压缩临时变量内存空间中的数据,根据压缩结果进行保存,并用所保存数据内容的内存地址和大小更新全局变量内存控制表中的信息。
3、根据权利要求2所述的方法,其特征在于,步骤b2所述根据压缩结果保存的方法为:比较压缩前后数据占用的内存大小,保存占用内存小的数据内容。
4、根据权利要求3所述的方法,其特征在于,步骤b2所述保存的方法具体为:读取全局变量内存控制表中记录的该全局变量占用的内存大小,与压缩前后占用内存小的数据占用的内存大小进行比较,如果二者相等,则将占用内存小的数据保存到全局变量内存控制表所记录的该全局变量的内存地址处,否则释放该内存地址对应的内存空间,并重新分配占用内存小的数据所占用的内存空间保存所述占用内存小的数据。
5、根据权利要求2所述的方法,其特征在于,步骤b2所述的压缩采用无损压缩算法。
6、根据权利要求2所述的方法,其特征在于,步骤b2之后,该方法进一步包括:使用所述全局变量时,通过全局变量名查找全局变量内存控制表,从全局变量内存控制表所记录的内存地址处取出相应的数据进行解压,然后使用解压后的全局变量。
7、根据权利要求1或2所述的方法,其特征在于,所述全局变量为结构体数组全局变量;
步骤a中设置的全局变量内存控制表包括:记录数组成员个数和单个数组成员大小的表头,以及记录相应数组成员内存地址和大小的数组成员表项。
8、根据权利要求7所述的方法,其特征在于,步骤b所述记录内存地址和大小的方法为:在全局变量内存控制表中查找到结构体数组全局变量中的数组成员对应的数组成员表项,并将保存该数组成员数据内容的内存地址和大小记录到对应的数组成员表项中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100804422A CN100361094C (zh) | 2005-07-01 | 2005-07-01 | 一种节省全局变量内存空间的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100804422A CN100361094C (zh) | 2005-07-01 | 2005-07-01 | 一种节省全局变量内存空间的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1851671A CN1851671A (zh) | 2006-10-25 |
CN100361094C true CN100361094C (zh) | 2008-01-09 |
Family
ID=37133150
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005100804422A Expired - Fee Related CN100361094C (zh) | 2005-07-01 | 2005-07-01 | 一种节省全局变量内存空间的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100361094C (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101826054B (zh) * | 2009-03-04 | 2011-12-07 | 安凯(广州)微电子技术有限公司 | 一种微内存系统的内存管理方法 |
EP2702491A4 (en) * | 2011-04-26 | 2015-02-25 | Lsi Corp | VARIABLE OVERSIZING FOR NON-VOLATILE STORAGE |
EP2742429A4 (en) | 2011-08-09 | 2015-03-25 | Lsi Corp | I / O DEVICE AND INTERACTION WITH DATA PROCESSING HOST |
CN103885886B (zh) * | 2012-12-20 | 2016-08-24 | 华为技术有限公司 | 一种全局数据的地址分配方法及相关装置 |
US9395924B2 (en) | 2013-01-22 | 2016-07-19 | Seagate Technology Llc | Management of and region selection for writes to non-volatile memory |
CN104768009B (zh) * | 2015-03-19 | 2018-01-05 | 中国科学院信息工程研究所 | 一种桌面虚拟化spice协议下的图像传输方法 |
CN105786525B (zh) * | 2016-03-23 | 2019-01-25 | 鼎点视讯科技有限公司 | 一种进程模型向线程模型移植代码的方法及装置 |
CN109117357A (zh) * | 2017-06-23 | 2019-01-01 | 中兴通讯股份有限公司 | 记录全局变量信息及检测全局变量越界操作的方法、装置 |
CN113449224B (zh) * | 2021-07-01 | 2022-11-22 | 北京东土科技股份有限公司 | 复杂数据类型数据映射的方法、装置、设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040059893A1 (en) * | 2002-07-31 | 2004-03-25 | Texas Instruments Incorporated | System and method to automatically stack and unstack java local variables |
US20040078522A1 (en) * | 2002-07-31 | 2004-04-22 | Texas Instruments Incorporated | Memory management of local variables upon a change of context |
US20040128662A1 (en) * | 2002-12-31 | 2004-07-01 | International Business Machines Corporation | Reducing load instructions via global data reordering |
CN1542623A (zh) * | 2003-04-29 | 2004-11-03 | 华为技术有限公司 | 一种实现内存管理的方法 |
-
2005
- 2005-07-01 CN CNB2005100804422A patent/CN100361094C/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040059893A1 (en) * | 2002-07-31 | 2004-03-25 | Texas Instruments Incorporated | System and method to automatically stack and unstack java local variables |
US20040078522A1 (en) * | 2002-07-31 | 2004-04-22 | Texas Instruments Incorporated | Memory management of local variables upon a change of context |
US20040128662A1 (en) * | 2002-12-31 | 2004-07-01 | International Business Machines Corporation | Reducing load instructions via global data reordering |
CN1542623A (zh) * | 2003-04-29 | 2004-11-03 | 华为技术有限公司 | 一种实现内存管理的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1851671A (zh) | 2006-10-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100361094C (zh) | 一种节省全局变量内存空间的方法 | |
CN104899156B (zh) | 一种面向大规模社交网络的图数据存储及查询方法 | |
CN103608782B (zh) | Lsb页面和msb页面中的选择性数据存储 | |
CN101526923A (zh) | 一种数据处理方法、装置和闪存存储系统 | |
CN103902467B (zh) | 压缩内存访问控制方法、装置及系统 | |
US9086920B2 (en) | Device for managing data buffers in a memory space divided into a plurality of memory elements | |
CN114115747A (zh) | 存储器系统及控制方法 | |
CN110663019A (zh) | 用于叠瓦式磁记录(smr)的文件系统 | |
CN104090847A (zh) | 一种固态存储设备的地址分配方法 | |
US9569381B2 (en) | Scheduler for memory | |
CN104281528A (zh) | 一种数据存储方法及装置 | |
CN108845958B (zh) | 一种交织器映射和动态内存管理系统及方法 | |
CN101021814A (zh) | 存储、查询方法及存储控制器和查询系统 | |
KR20140146458A (ko) | 메모리 관리 방법 및 장치 | |
US11928359B2 (en) | Memory swapping method and apparatus | |
CN111984425B (zh) | 用于操作系统的内存管理方法、装置及设备 | |
CN111694765A (zh) | 一种面向移动应用特征的非易失性内存文件系统多粒度空间管理方法 | |
US20060136668A1 (en) | Allocating code objects between faster and slower memories | |
CN117215485A (zh) | Zns ssd管理方法及数据写入方法、存储装置、控制器 | |
CN106537321B (zh) | 存取文件的方法、装置和存储系统 | |
KR100852729B1 (ko) | 데이타 압축 관리장치 | |
CN100557578C (zh) | 动态存储管理装置及方法 | |
CN109697037A (zh) | 节省本地dram的方法、装置、计算机设备及存储介质 | |
CN106326150A (zh) | 内存访问处理方法及装置 | |
CN113674137A (zh) | 基于lru策略最大化提升显存利用率的模型加载方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080109 Termination date: 20170701 |