CN1851671A - 一种节省全局变量内存空间的方法 - Google Patents

一种节省全局变量内存空间的方法 Download PDF

Info

Publication number
CN1851671A
CN1851671A CN 200510080442 CN200510080442A CN1851671A CN 1851671 A CN1851671 A CN 1851671A CN 200510080442 CN200510080442 CN 200510080442 CN 200510080442 A CN200510080442 A CN 200510080442A CN 1851671 A CN1851671 A CN 1851671A
Authority
CN
China
Prior art keywords
global
memory
global variable
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.)
Granted
Application number
CN 200510080442
Other languages
English (en)
Other versions
CN100361094C (zh
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CNB2005100804422A priority Critical patent/CN100361094C/zh
Publication of CN1851671A publication Critical patent/CN1851671A/zh
Application granted granted Critical
Publication of CN100361094C publication Critical patent/CN100361094C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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所述记录内存地址和大小的方法为:在全局变量内存控制表中查找到数组成员对应的数组成员表项,并将保存该数组成员数据内容的内存地址和大小记录到对应的数组成员表项中。
CNB2005100804422A 2005-07-01 2005-07-01 一种节省全局变量内存空间的方法 Expired - Fee Related CN100361094C (zh)

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 true CN1851671A (zh) 2006-10-25
CN100361094C 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)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101826054B (zh) * 2009-03-04 2011-12-07 安凯(广州)微电子技术有限公司 一种微内存系统的内存管理方法
CN103620563A (zh) * 2011-04-26 2014-03-05 Lsi公司 用于非易失性存储器的可变超量配置
CN104768009A (zh) * 2015-03-19 2015-07-08 中国科学院信息工程研究所 一种桌面虚拟化spice协议下的图像传输方法
US9389805B2 (en) 2011-08-09 2016-07-12 Seagate Technology Llc I/O device and computing host interoperation
US9395924B2 (en) 2013-01-22 2016-07-19 Seagate Technology Llc Management of and region selection for writes to non-volatile memory
CN105786525A (zh) * 2016-03-23 2016-07-20 鼎点视讯科技有限公司 一种进程模型向线程模型移植代码的方法及装置
CN103885886B (zh) * 2012-12-20 2016-08-24 华为技术有限公司 一种全局数据的地址分配方法及相关装置
CN109117357A (zh) * 2017-06-23 2019-01-01 中兴通讯股份有限公司 记录全局变量信息及检测全局变量越界操作的方法、装置
CN113449224A (zh) * 2021-07-01 2021-09-28 北京东土科技股份有限公司 复杂数据类型数据映射的方法、装置、设备和存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1387275B1 (en) * 2002-07-31 2009-06-17 Texas Instruments Inc. Memory management of local variables upon a change of context
EP1387247A3 (en) * 2002-07-31 2007-12-12 Texas Instruments Inc. System and method to automatically stack and unstack java local variables
US7310799B2 (en) * 2002-12-31 2007-12-18 International Business Machines Corporation Reducing load instructions via global data reordering
CN100343826C (zh) * 2003-04-29 2007-10-17 华为技术有限公司 一种实现内存管理的方法

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101826054B (zh) * 2009-03-04 2011-12-07 安凯(广州)微电子技术有限公司 一种微内存系统的内存管理方法
CN103620563A (zh) * 2011-04-26 2014-03-05 Lsi公司 用于非易失性存储器的可变超量配置
CN103620563B (zh) * 2011-04-26 2015-04-29 Lsi公司 用于非易失性存储器的可变超量配置
US10514864B2 (en) 2011-08-09 2019-12-24 Seagate Technology Llc I/O device and computing host interoperation
US9389805B2 (en) 2011-08-09 2016-07-12 Seagate Technology Llc I/O device and computing host interoperation
US10936251B2 (en) 2011-08-09 2021-03-02 Seagate Technology, Llc I/O device and computing host interoperation
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
CN104768009A (zh) * 2015-03-19 2015-07-08 中国科学院信息工程研究所 一种桌面虚拟化spice协议下的图像传输方法
CN104768009B (zh) * 2015-03-19 2018-01-05 中国科学院信息工程研究所 一种桌面虚拟化spice协议下的图像传输方法
CN105786525A (zh) * 2016-03-23 2016-07-20 鼎点视讯科技有限公司 一种进程模型向线程模型移植代码的方法及装置
CN105786525B (zh) * 2016-03-23 2019-01-25 鼎点视讯科技有限公司 一种进程模型向线程模型移植代码的方法及装置
CN109117357A (zh) * 2017-06-23 2019-01-01 中兴通讯股份有限公司 记录全局变量信息及检测全局变量越界操作的方法、装置
CN113449224A (zh) * 2021-07-01 2021-09-28 北京东土科技股份有限公司 复杂数据类型数据映射的方法、装置、设备和存储介质
CN113449224B (zh) * 2021-07-01 2022-11-22 北京东土科技股份有限公司 复杂数据类型数据映射的方法、装置、设备和存储介质

Also Published As

Publication number Publication date
CN100361094C (zh) 2008-01-09

Similar Documents

Publication Publication Date Title
CN1851671A (zh) 一种节省全局变量内存空间的方法
CN1292370C (zh) 从源系统复制信息到目标系统的方法
CN1650260A (zh) 基于存储区的数据预取
CN1271524C (zh) 一种静态内存管理方法
US20070005911A1 (en) Operating System-Based Memory Compression for Embedded Systems
US6594749B1 (en) System and method for memory management using fixed-size blocks
CN1859325A (zh) 基于链表的进程间消息传递方法
CN1924851A (zh) 数据存储方法和数据存储结构
CN1828557A (zh) 嵌入式操作系统中进程映射实现方法
CN1687899A (zh) 将应用程序动态下载到用户识别模块的方法、系统及模块
US7865632B2 (en) Memory allocation and access method and device using the same
CN111984425A (zh) 用于操作系统的内存管理方法、装置及设备
CN1920796A (zh) 用于将文件的数据存储在存储块中的高速缓存方法及系统
CN1908937A (zh) 一种闪存中的flash文件的管理方法及系统
CN100342374C (zh) 一种数据存储方法及装置
CN1909672A (zh) 一种用于显示图片的存储方法及系统
CN1489334A (zh) 一种静态动态结合的存储区管理的方法
KR100852729B1 (ko) 데이타 압축 관리장치
CN101059774A (zh) 动态存储管理装置及方法
CN101055509A (zh) 高效流媒体数据读写系统
CN1901548A (zh) 缓冲区管理方法
CN100337192C (zh) 一种定时器管理方法
CN101060679A (zh) 事件插入方法
CN113674137A (zh) 基于lru策略最大化提升显存利用率的模型加载方法
CN1567250A (zh) 一种高速零碎片的小对象内存结构及分配方法

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

Granted publication date: 20080109

Termination date: 20170701

CF01 Termination of patent right due to non-payment of annual fee