js 全局变量量占用的内存有没有限制

全局变量与局部变量在内存中的区别详细解析
字体:[ ] 类型:转载 时间:
以下是对全局变量与局部变量在内存中的区别进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
一、预备知识—程序的内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域(.data),未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(.bss)。 - 程序结束后由系统释放。
4、文字常量区 —常量字符串就是放在这里的(.rodata)。 程序结束后由系统释放。
5、程序代码区—存放函数体的二进制代码(.text)。二、例子程序这是一个前辈写的,非常详细 代码如下://main.cppint a = 0;&&&&&&&&& // 全局初始化区char *p1;&&&&&&&&&& // 全局未初始化区main(){&&&&&&&&&&&& // 栈区& char s[] = "abc"; // 栈区& char *p2;&&&&&&&& // 栈区& char *p3 = "123456";&&&& // "" 在常量区,p3在栈区& static int c =0;&&&&&&&& // 全局(静态)初始化区& p1 = (char *)malloc(10);& p2 = (char *)malloc(20); // 分配得来的10和20字节的区域就在堆区& strcpy(p1, "123456");&&& // "" 放在常量区,编译器可能会将它&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 与p3所指向的"123456"优化成一个地方。} static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
答:1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
2) 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。  &&&&&&&&&&&&&&&&
3) static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件   
static全局变量与普通的全局变量有什么区别:
static全局变量只初使化一次,防止在其他文件单元中被引用;   
static局部变量和普通局部变量有什么区别:
static局部变量只被初始化一次,下一次依据上一次结果值;   
static函数与普通函数有什么区别:
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝&==============================================================一个C语言变量分配的实际例子:&我们来看看在可执行文件中,变量们会被分配在哪些区里.这里以可执行文件为例子,可执行文件有固定的内存加载地址,符号(函数/变量的名字)将来在内存里的地址连接器是可以提前确定的。源程序编译连接的结果是形成1堆汇编指令代码,大致分为.text .data .bss等几个节区(section)。对于.exe文件和.so文件,全局和静态变量都放在.data 或.bss段(gas把源文件从头到尾扫描1遍,才知道一个变量的全部情况:是否定义;类型;是否初始化。然后把初始化的变量在.data段里分配位置和 空间,把没初始化的变量在.bss段里分配位置和空间,没定义的变量分配在.undef段)。汇编指令代码里全局变量表现为一个内存地址(全局变量在目标 文件里是一个偏移值,加载进内存里是一个内存地址)。临时变量在汇编代码里变成ebp/esp+n,表现为一个堆栈地址,化为程序正文(.text)的一 部分。有些变量的最终内存地址在加载进内存之前还不能确定,需要加载进内存才可以计算出来.
全局变量 作用域是跨越多个源程序的。因此全局变量不能重名。静态变量作用域是位于单个源程序内。多个源程序可以有同名的全局静态变量。本例中,为了区分多个同名的静态变量,gcc 用 c444和c444.0 来加以区别。 代码如下:[test@redhat]// more aaa.c# include &stdio.h&int a111 = 0;&&&&&&&&&&&&& // 全局变量 已初始化char *p111 = "654321";&&&& // 全局指针变量 已经初始化static int c444 = 9;&&&&&& // 静态全局变量 已经初始化static int c555;&&&&&&&&&& // 静态全局变量 未初始化main() { &&& int b222;&&&&&&&&&&&&& // 局部变量&&& char s333[] = "abc";&& // 局部变量&&& char *p222;&&&&&&&&&&& // 局部变量&&& char *p333 = "123456";&&& // 局部变量&&& static int c444 =0;&&&&&& // 已初始化静态局部变量,与前面静态全局变量重名&&& p111 = (char *)malloc(10); &&& p222 = (char *)malloc(20);&&& strcpy(p111, "123456");}
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具(原文:http://codeup.org/archives/200)
全集变量、局部变量、静态全局变量、静态局部变量在内存中如何存储,有什么区别,栈和堆的区别,这都是C/C++的基础问题。在各种招聘笔试面试中,经常都能够遇到与之相关的问题。前些日子我看了一些与之相关的文章,现在总结一下存放于此。
先分析一下四种变量的区别:
一、先由程序的内存分配说起,一个完整的C/C++程序在运行时会占用的内存分为几个部分。
栈(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆(heap) :一般由程序员分配释放,&若程序员不释放,程序结束时可能由OS回收&。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。malloc和new等操作实际上就是在堆中申请内存,对象使用完后要手动释放,否则只能等待程序结束时由系统回收,会产生内存泄漏。
全局区(静态区)(static):全局变量和静态变量是存储在一起的,初始化过的全局变量和静态变量在同一块区域,未初始化的全局变量和静态变量存放在一块相邻的区域内。此区域由系统在程序结束后释放。
文字常量区:常量字符串存放于此,在程序结束后由系统释放。字符常量就是像这样的 char* str=&abc&;其中的&abc&。在实际情况中,是会复用的,比如变量a和b都赋值为&abc&则实际上他们指向同一块地址。
程序代码区:存放函数体的二进制代码。
二、下面看一个例子程序:
附上内存地址截图,主要是验证p1与p3所指向的&&P是否被优化成同一个地方了。
三、再从作用域上来区分它们。
全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。
局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。
静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。
静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。
从分配内存空间看:全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间。
从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。
四、总的来说,全局变量、局部变量、静态全局变量、静态局部变量的区别是:
生存周期不同
作用范围不同
分配方式不同
再来分析下堆和栈的不同:
分配方式不同
空间大小不同
分配效率不同
能否产生碎片不同
生长方向不同
1、分配方式不同:
栈: 由系统自动分配。 例如,声明在函数中一个局部变量 系统自动在栈中为b开辟空间堆: 需要程序员自己申请,并指明大小,在c中malloc函数如p1 = (char *)malloc(10);在C++中用new运算符如p2 = (char *)new(10);但是注意p1、p2本身是在栈中的。
2、空间大小不同:
一般来讲在32位系统下,堆内存可以达到4G的空间,从这个角度来看堆内存几乎是没有什么限制的。但是对于栈来讲,一般都是有一定的空间大小的,例如,在VC6下面,默认的栈空间大小是1M。
3、分配效率不同:
栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执 行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考 数据结构/操作系统)在堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的 内存空间,这样就有机会分到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多。
4、碎片问题:
栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块 内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的 大小,系统会自动的将多余的那部分重新放入空闲链表中。
对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他们是如此的一一对应,以至于永远都不可能有一个内存块从栈中间弹出,在他弹出之前,在他上面的后进的栈内容已经被弹出。
5、生长方向:
对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,它的生长方向是向下的,是向着内存地址减小的方向增长。
堆和栈相比,由于大量new/delete的使用,容易造成大量的内存碎片;由于没有专门的系统支持,效率很低;由于可能引发用户态和核心态的切换,内存的申请,代价变得更加昂贵。所以栈在程序中是应用最广泛的,就算是函数的调用也利用栈去完成,函数调用过程中的参数,返回地址,EBP和局部变量都采用栈的方式存放。所以,我们推荐大家尽量用栈,而不是用堆。虽然栈有如此众多的好处,但是由于和堆相比不是那么灵活,有时候分配大量的内存空间,还是用堆好一些。
本文有很多内容摘抄自网络,作者不详。
声明:未作说明,则本文为原创。转载务必注明。&注意:转载须保留全文,如需修改请&。&本文永久地址:
阅读(...) 评论() &一种节省全局变量内存空间的方法
专利名称一种节省全局变量内存空间的方法
技术领域本发明涉及内存使用技术,尤指一种节省全局变量内存空间的方法。
背景技术 全局变量是在程序的整个执行过程中始终占用预先设定好的内存空间的一种变量,程序执行中的每个步骤都能通过访问全局变量占用的内存空间来赋值或使用该全局变量,在程序中对全局变量进行操作的方法如下首先,预先设置全局变量的数据类型,并在程序初始化时为所设置的全局变量分配内存空间;然后,程序在执行过程中读/写保存在内存空间的全局变量;最后,程序执行完毕释放该全局变量所占用的内存空间。
该方法中,程序根据全局变量预设的数据类型来分配内存空间,即使在程序执行过程中的某些时候,该全局变量并没有被赋值,也始终占用同样大小的内存空间。
这种方法的缺点是不能根据程序运行过程中全局变量的赋值情况,动态地改变全局变量占用的内存空间。该缺点典型地反映在结构体数组等占用内存较大的全局变量上。实际应用中,经常会在程序刚开始时就设置一个很大的结构体数组全局变量,并开辟预设大小的内存空间。可是程序刚开始执行过程中,全局变量的所有数组成员不会都被赋值,对于尚未赋值的数组成员而言,为其分配的内存空间处于闲置状态,这就造成一定程度的内存浪费。
对于基站单板等设备而言,其内存资源有限。随着需求的不断增多,单板上运行程序的复杂度越来越高,程序中不得不使用的全局变量越来越多,这种内存消耗将成为制约单板程序进一步发展的瓶颈。
有鉴于此,本发明的主要目的在于提供一种节省全局变量内存空间的方法,减少不必要的内存闲置和浪费,对内存资源加以合理利用。
为达到上述目的,本发明的技术方案具体是这样实现的一种节省全局变量内存空间的方法,其特征在于,该方法包括以下步骤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系统的领域,或者应用于希望在软件系统中节省内存开销的任何领域。
由上述的实施例可见,本发明的这种节省全局变量内存空间的方法,利用全局变量内存控制表控制全局变量的内存使用情况,通过减少不必要的内存闲置和浪费,实现了内存资源的合理利用。
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所述记录内存地址和大小的方法为在全局变量内存控制表中查找到数组成员对应的数组成员表项,并将保存该数组成员数据内容的内存地址和大小记录到对应的数组成员表项中。
本发明公开了一种节省全局变量内存空间的方法。该方法的过程包括设置记录待使用全局变量信息的全局变量内存控制表,并分配内存空间保存所述全局变量内存控制表;为上一步骤所述全局变量赋值并分配内存空间保存赋值后的全局变量,在全局变量内存控制表中记录所保存的全局变量的内存地址和大小。本发明的这种方法利用全局变量内存控制表来记录全局变量的内存使用情况,通过减少不必要的内存闲置和浪费,实现了内存资源的合理配置。
文档编号G06F12/02GK
公开日日 申请日期日 优先权日日
发明者伏治军 申请人:华为技术有限公司}

我要回帖

更多关于 python 全局变量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信