精华内容
下载资源
问答
  • 动态存储方式和静态存储方式

    千次阅读 2018-01-29 10:27:41
    从变量的作用域的角度来观察,变量可以分为...从变量值存在的时间(即生存期)观察,变量的存储有两种不同的方式静态存储方式和动态存储方式 静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式动态

    从变量的作用域的角度来观察,变量可以分为全局变量局部变量

    • 全局变量都是存放在静态存储区中的。因此它们的生存期是固定的,存在于程序的整个运行过程
    • 局部变量,如果不专门声明存储类别,都是动态地分配存储空间的

    从变量值存在的时间(即生存期)观察,变量的存储有两种不同的方式:静态存储方式动态存储方式

    • 静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式
    • 动态存储方式是在程序运行期间根据需要进行动态的分配存储空间的方式
                 用户区

    程序区
    静态存储区
    动态存储区
    数据存放在静态存储区和动态存储区;

    静态存储区:

    全局变量全部存储在静态存储区;

    程序开始执行时给全局变量分配存储区,程序执行完毕就释放。在程序执行过程中占据固定的存储单元

    动态存储区:

    ①函数形式参数

    ②函数中定义的没有用关键字static声明的变量

    ③函数调用时的现场保护和返回地址等存放在动态存储区

     函数调用开始时分配,函数结束时释放。在程序执行过程中,这种分配和释放是动态的


    对于局部变量来说,声明存储类型的作用是指定变量存储的区域以及由此产生的生存期的问题,而对于全局变量来说,声明存储类型的作用是变量作用域的扩展问题

    每一个变量和函数都有两个属性:数据类型和数据的存储类别
    存储类别指的是数据在内存中存储的方式(如静态存储和动态存储)
    存储类别包括:自动的、静态的、寄存器的、外部的
    根据变量的存储类别,可以知道变量的作用域和生存期
    1.自动变量(auto变量)
    • 局部变量,如果不专门声明存储类别,都是动态地分配存储空间的
    • 调用函数时,系统会给局部变量分配存储空间,调用结束时就自动释放空间。因此这类局部变量称为自动变量
    • 自动变量用关键字auto作存储类别的声明
    2.静态局部变量(static局部变量)
    • 希望函数中的局部变量在函数调用结束后不消失而继续保留原值,即其占用的存储单元不释放,在下一次再调用该函数时,该变量已有值(就是上一次函数调用结束时的值),这时就应该指定该局部变量为“静态局部变量”,用关键字static进行声明
        用static 声明一个变量的作用是:
          (1) 对局部变量用static声明,把它分配在静态存储区,该变量在整个程序执行期间不释放,其所分配的空间始终存在。
          (2) 对全局变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。

    3. 寄存器变量(register变量)
    • 一般情况下,变量(包括静态存储方式和动态存储方式)的值是存放在内存中的
    • 寄存器变量允许将局部变量的值放在CPU中的寄存器中
    • 现在的计算机能够识别使用频繁的变量,从而自动地将这些变量放在寄存器中,而不需要程序设计者指定

    4.外部变量
    • 一般来说,外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。

          在一个文件内扩展外部变量的作用域
    • 外部变量有效的作用范围只限于定义处到本文件结束。
    • 如果用关键字extern对某变量作“外部变量声明”,则可以从“声明”处起,合法地使用该外部变量

     关于作用域和生存期的概念
    • 对一个变量的属性可以从两个方面分析:
      作用域:如果一个变量在某个文件或函数范围内是有效的,就称该范围为该变量的作用域
      生存期:如果一个变量值在某一时刻是存在的,则认为这一时刻属于该变量的生存期
    • 作用域是从空间的角度,生存期是从时间的角度
    • 二者有联系但不是同一回事



    展开全文
  • 动态存储方式静态存储方式

    千次阅读 2013-07-23 15:31:41
    从变量值存在的时间(即生存期)观察,变量的存储有两种不同的方式静态存储方式和动态存储方式 静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式动态存储方式是在程序运行期间根据需要进行动态的...

    从变量的作用域的角度来观察,变量可以分为全局变量局部变量

    • 全局变量都是存放在静态存储区中的。因此它们的生存期是固定的,存在于程序的整个运行过程
    • 局部变量,如果不专门声明存储类别,都是动态地分配存储空间的

    从变量值存在的时间(即生存期)观察,变量的存储有两种不同的方式:静态存储方式动态存储方式

    • 静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式
    • 动态存储方式是在程序运行期间根据需要进行动态的分配存储空间的方式
                 用户区

    程序区
    静态存储区
    动态存储区
    数据存放在静态存储区和动态存储区;

    静态存储区:

    全局变量全部存储在静态存储区;

    程序开始执行时给全局变量分配存储区,程序执行完毕就释放。在程序执行过程中占据固定的存储单元

    动态存储区:

    ①函数形式参数

    ②函数中定义的没有用关键字static声明的变量

    ③函数调用时的现场保护和返回地址等存放在动态存储区

     函数调用开始时分配,函数结束时释放。在程序执行过程中,这种分配和释放是动态的


    对于局部变量来说,声明存储类型的作用是指定变量存储的区域以及由此产生的生存期的问题,而对于全局变量来说,声明存储类型的作用是变量作用域的扩展问题

    每一个变量和函数都有两个属性:数据类型和数据的存储类别
    存储类别指的是数据在内存中存储的方式(如静态存储和动态存储)
    存储类别包括:自动的、静态的、寄存器的、外部的
    根据变量的存储类别,可以知道变量的作用域和生存期
    1.自动变量(auto变量)
    • 局部变量,如果不专门声明存储类别,都是动态地分配存储空间的
    • 调用函数时,系统会给局部变量分配存储空间,调用结束时就自动释放空间。因此这类局部变量称为自动变量
    • 自动变量用关键字auto作存储类别的声明
    2.静态局部变量(static局部变量)
    • 希望函数中的局部变量在函数调用结束后不消失而继续保留原值,即其占用的存储单元不释放,在下一次再调用该函数时,该变量已有值(就是上一次函数调用结束时的值),这时就应该指定该局部变量为“静态局部变量”,用关键字static进行声明
        用static 声明一个变量的作用是:
          (1) 对局部变量用static声明,把它分配在静态存储区,该变量在整个程序执行期间不释放,其所分配的空间始终存在。
          (2) 对全局变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。

    3. 寄存器变量(register变量)
    • 一般情况下,变量(包括静态存储方式和动态存储方式)的值是存放在内存中的
    • 寄存器变量允许将局部变量的值放在CPU中的寄存器中
    • 现在的计算机能够识别使用频繁的变量,从而自动地将这些变量放在寄存器中,而不需要程序设计者指定

    4.外部变量
    • 一般来说,外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。

          在一个文件内扩展外部变量的作用域
    • 外部变量有效的作用范围只限于定义处到本文件结束。
    • 如果用关键字extern对某变量作“外部变量声明”,则可以从“声明”处起,合法地使用该外部变量

     关于作用域和生存期的概念
    • 对一个变量的属性可以从两个方面分析:
      作用域:如果一个变量在某个文件或函数范围内是有效的,就称该范围为该变量的作用域
      生存期:如果一个变量值在某一时刻是存在的,则认为这一时刻属于该变量的生存期
    • 作用域是从空间的角度,生存期是从时间的角度
    • 二者有联系但不是同一回事















    展开全文
  • 堆/栈/动态存储方式/静态存储方式

    千次阅读 2016-07-09 19:30:43
    动态存储方式 所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放。...所谓静态存储方式是指在程序编译

    动态存储方式

    所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放。 典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配, 调用函数完毕立即释放。如果一个函数被多次调用,则反复地分配、 释放形参变量的存储单元。

    静态存储方式

    所谓静态存储方式是指在程序编译期间分配固定的存储空间的方式。该存储方式通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束。全局变量,静态变量等就属于此类存储方式。

    总结

    从以上分析可知, 静态存储变量是一直存在的, 而动态存储变量则时而存在时而消失。我们又把这种由于变量存储方式不同而产生的特性称变量的生存期。 生存期表示了变量存在的时间。 生存期和作用域是从时间和空间这两个不同的角度来描述变量的特性,这两者既有联系,又有区别。 一个变量究竟属于哪一种存储方式, 并不能仅从其作用域来判断,还应有明确的存储类型说明。

    内存中用户存储空间的分配情况(三种):

     程序区:存放程序语句

    静态存储区存放全局变量,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放。

    动态存储区:存放以下数据:函数形式参数。在调用函数时给形参分配存储空间;自动变量(未加static声明的局部变量;函数调用时的现场保护和返回地址等;

    就是那些由编辑器在需要的时候分配,在不需要的时候自动清除的变量的存储区,里面的变量通常是局部变量。函数参数等。

    就是那些右new分配的内存块,他们的释放编辑器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete.如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

    堆和栈的区别主要为:

    1.管理方式不同: 对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。

    2.能否产生碎片不同:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他

      们是如此的一一对应,以至于永远都不可能有一个内存块从栈中间弹出,在他弹出之前,在他上面的后进的栈内容已经被弹出

    3.生长方向:对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,它的生长方向是向下的,是向着内存地址减小的方向增长。

    4.分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动  态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现。

    5.分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系统)在堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会分到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多。 

    总结

    堆和栈相比,由于大量new/delete的使用,容易造成大量的内存碎片;由于没有专门的系统支持,效率很低;由于可能引发用户态和核心态的切换,内存的申请,代价变得更加昂贵。所以栈在程序中是应用最广泛的,就算是函数的调用也利用栈去完成,函数调用过程中的参数,返回地址,EBP和局部变量都采用栈的方式存放。所以,我们推荐大家尽量用栈,而不是用堆。   
    栈有如此众多的好处,但是由于和堆相比不是那么灵活,有时候分配大量的内存空间,还是用堆好一些。
    无论是堆还是栈,都要防止越界现象的发生(除非你是故意使其越界),因为越界的结果要么是程序崩溃,要么是摧毁程序的堆、栈结构,产生以想不到的结果,就算是在你的程序运行过程中,没有发生上面的问题,你还是要小心,说不定什么时候就崩掉,那时候debug可是相当困难的:)  

    以下转载一篇关于栈和堆的区别的文章

    来源:http://www.chinaitpower.com/2005September/2005-09-13/206685.html

    一、预备知识—程序的内存分配

    一个由c/C++编译的程序占用的内存分为以下几个部分 
    1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 
    2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 
    3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 
    4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放 
    5、程序代码区—存放函数体的二进制代码。 

    二、例子程序 
    这是一个前辈写的,非常详细 
    //main.cpp 
    int a = 0; 全局初始化区 
    char *p1; 全局未初始化区 
    main() 

    int b; 栈 
    char s[] = "abc"; 栈 
    char *p2; 栈 
    char *p3 = "123456"; 123456在常量区,p3在栈上。 
    static int c =0; 全局(静态)初始化区 
    p1 = (char *)malloc(10); 
    p2 = (char *)malloc(20); 
    分配得来得10和20字节的区域就在堆区。 
    strcpy(p1, "123456"); 123456放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。 

    二、堆和栈的理论知识 
    2.1申请方式 
    stack: 
    由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间 
    heap: 
    需要程序员自己申请,并指明大小,在c中malloc函数 
    如p1 = (char *)malloc(10); 
    在C++中用new运算符 
    如p2 = (char *)malloc(10); 
    但是注意p1、p2本身是在栈中的。 
    2.2 
    申请后系统的响应 
    栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。 
    堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。 
    2.3申请大小的限制 
    栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在 WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。 
    堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。 
    2.4申请效率的比较: 
    栈由系统自动分配,速度较快。但程序员是无法控制的。 
    堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便. 
    另外,在WINDOWS下,最好的方式是用VirtualAlloc分配内存,他不是在堆,也不是在栈是直接在进程的地址空间中保留一快内存,虽然用起来最不方便。但是速度快,也最灵活
    2.5堆和栈中的存储内容 
    栈: 在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。 
    当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。 
    堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。 
    2.6存取效率的比较 

    char s1[] = "aaaaaaaaaaaaaaa"; 
    char *s2 = "bbbbbbbbbbbbbbbbb"; 
    aaaaaaaaaaa是在运行时刻赋值的; 
    而bbbbbbbbbbb是在编译时就确定的; 
    但是,在以后的存取中,在栈上的数组比指针所指向的字符串(例如堆)快。 
    比如: 
    #include <stdio.h> 
    void main() 

    char a = 1; 
    char c[] = "1234567890"; 
    char *p ="1234567890"; 
    a = c[1]; 
    a = p[1]; 
    return; 

    对应的汇编代码 
    10: a = c[1]; 
    00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh] 
    0040106A 88 4D FC mov byte ptr [ebp-4],cl 
    11: a = p[1]; 
    0040106D 8B 55 EC mov edx,dword ptr [ebp-14h] 
    00401070 8A 42 01 mov al,byte ptr [edx+1] 
    00401073 88 45 FC mov byte ptr [ebp-4],al 
    第一种在读取时直接就把字符串中的元素读到寄存器cl中,而第二种则要先把指针值读到edx中,在根据edx读取字符,显然慢了。

     
    2.7小结: 
    堆和栈的区别可以用如下的比喻来看出: 
    使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。 
    使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。 

    堆和栈的区别主要分: 
    操作系统方面的堆和栈,如上面说的那些,不多说了。 
    还有就是数据结构方面的堆和栈,这些都是不同的概念。这里的堆实际上指的就是(满足堆性质的)优先队列的一种数据结构,第1个元素有最高的优先权;栈实际上就是满足先进后出的性质的数学或数据结构。 
    虽然堆栈,堆栈的说法是连起来叫,但是他们还是有很大区别的,连着叫只是由于历史的原因。


    展开全文
  • 从变量值的生存期可以对变量进行分类为【静态存储方式动态存储方式】 用户的存储空间可大致分为以下三种 1、程序区 2、静态区 3、动态区 一、 静态存储 1、基本概念 静态存储方式:指在程序运行时,给变量...
    • 从变量的作用域角度可以对变量进行分类为【全局变量】和【局部变量】
    • 从变量值的生存期可以对变量进行分类为【静态存储方式】和【动态存储方式】
    • 用户的存储空间可大致分为以下三种
      1、程序区
      2、静态区
      3、动态区

    一、 静态存储

    1、基本概念

    • 静态存储方式:指在程序运行时,给变量分配固定的存储空间的方式

    2、 静态存储区存放以下变量:

    • 全局变量:在程序开始执行时给全局变量分配存储区,程序运行完毕之后释放。在程序运行过程中它们占据固定的存储单元而不动态进行分配和释放。
    • 静态局部变量:有时希望局部变量的值在函数调用结束后不消失而保留原值,这时就应该指定局部变量为“静态局部变量”了,用关键字static进行生命

    二、动态存储

    1、基本概念

    动态存储方式:指在程序运行时,根据需要给变量分配动态的存储空间的方式

    2、动态存储区存放以下变量。

    • 函数形式的参数
    • 自动变量(未加static声明的局部变量):函数中的局部变量,如不声明为static存储类别的变量,则都是动态存储类别的。函数的形参和函数体中定义的变量都属于此类。在调用函数的时候系统给他自动分配空间,在函数调用结束后,自动释放存储空间。这类局部变量称为自动变量,用关键字auto声明存储类别。
    • 函数调用时的现场保护和返回地址。

    三、示例脚本代码

    1、示例脚本代码
    static int c;
    int prine(register int number)//判断是否为素数函数
    {
    	register int flag =1;
    	auto int n;
    	for(n=2;n<number/2  && flag==1;n++)
    		if (number%n==0)
    			flag=0;
    		return flag;
    }
    demo (int a )//static、auto变量的演示函数
    {
    	auto int b=0;
    	int d;
    	static c=3;
    	b=b+1;
    	c=c+1;
    	lr_output_message("demo()函数中的d=%d",d);
    	lr_output_message("demo()函数中的static c=%d",c);
    	return a+b+c;
    }
    
    Action()
    {
    	int a=2,i;
    	for(i=0;i<3;i++)
    	{
    		lr_output_message("demo()函数部分第%d运行情况如下:",i+1);
    		lr_output_message("函数demo运行结果为:%d",demo(a));
    		lr_output_message("------------------\n\r");
    	}
    	
    	//判断13是否为素数,并输出提示信息
    	if(prime(13)==0) lr_output_message("13不是素数!");
    	else lr_output_message("13是素数!");
    	
    	lr_output_message("c=%d",c);//输出静态变量的值
    	
    	return 0;
    }
    
    2、以上代码的输出信息
    Running Vuser...
    Starting iteration 1.
    Starting action Action.
    Action.c(30):demo()函数部分第1运行情况如下:
    Action.c(18):demo()函数中的d=25362920;
    Action.c(19):demo()函数中的static c=4;
    Action.c(31):函数demo运行结果为:7
    Action.c(32):---------------------
    
    Action.c(30):demo()函数部分第2运行情况如下:
    Action.c(18):demo()函数中的d=25362920;
    Action.c(19):demo()函数中的static c=5;
    Action.c(31):函数demo运行结果为:8
    Action.c(32):---------------------
    
    Action.c(30):demo()函数部分第3运行情况如下:
    Action.c(18):demo()函数中的d=25362920;
    Action.c(19):demo()函数中的static c=6;
    Action.c(31):函数demo运行结果为:9
    Action.c(32):---------------------
    
    Action.c(36):13是素数!
    Action.c(38):c=0
    Ending action Action.
    Ending iteration 1.
    Ending Vuser...
    
    3、解析
    • 在demo()函数中,d未被赋值,则输出的是值应该是随机数
    • 如果没给自动变量赋初值,则在它的值为一个不确定值,自动变量在函数调用的时候,每调用一次,给函数重新赋一次值。
    • 静态局部变量在定义时不赋值,则编译时默认为0。如上静态变量c。
    • 静态局部变量在编译的时候赋初值,即只赋初值一次。参见demo()函数中的static c=3,每次调用时,它的值都在变化,第一次调用c=3;c=c+1后c的值为4,第二次调用c的值为4…
    展开全文
  • 动态存储和静态存储区域区别

    千次阅读 多人点赞 2017-11-27 19:19:23
    动态存储方式 所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放。...所谓静态存储方式
  • 动态存储变量和静态存储变量

    千次阅读 2011-03-31 20:21:00
    静态变量 全局变量
  • 全局变量静态全局变量都是静态存储的;在存储上无区别。区别在于他们的作用域;全局变量的作用域是整个源程序,当源程序有多个源文件组成时,全局变量在各个源程序文件都是有效的;而静态全局变量怎被限制了作用域...
  • 静态存储和动态存储详解

    千次阅读 2015-04-01 22:29:07
    静态存储动态存储:  静态存储变量通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束。动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放。 典型的例子是函数的...
  • 动态存储区、静态存储区、堆栈的区别

    千次阅读 多人点赞 2018-09-11 12:43:46
    动态存储区、静态存储区、堆栈的区别 内存中用户存储空间的分配情况(三种) 程序区:存放程序语句 静态存储动态存储区  ...
  • 静态存储方式

    千次阅读 2012-07-11 09:24:19
     变量的存储方式可分为:“静态存储动态存储”两种。  静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。  全局变量即属于此类存储方式。  动态存储变量是在...
  • C语言的动态存储变量与静态存储变量     动态存储变量与静态存储变量     在C语言中,每一个变量都有3个属性:一是“数据类型”,如int、float、char等,它确定了变量存储长度运算方式;二是“作用域”...
  • C语言基础--静态存储和动态存储

    千次阅读 2016-06-30 13:54:18
     变量从变量值存在的时间(即生存期)角度分:静态存储方式和动态存储方式。静态:由系统分配固定的存储空间,全局变量就存储在静态存储区。动态:系统根据需要进行动态的分配存储空间。在动态存储区存放一下数据:...
  • 变量的存储方式可分为“静态存储动态存储”两种。  静态存储变量通常是在变量定义时就分定存储单元并一 直保持不变, 直至整个程序结束。5.5.1节中介绍的全局变量即属于此类存储方式动态存储变量是在...
  • 1. 有些时候在运行时创建数组由于在编译时创建数组(有些时候不是这样, 比如使用OpenGL绘图GPU并行计算结合的... 有两种方式, 一种是动态方式, 一种是静态方式. 使用new一般是动态方式, 一般是与指针搭配, 静态方式
  • C中静态存储和动态存储区

    千次阅读 2017-05-05 16:45:53
    而内存主要分为两类:静态存储和动态存储区。 1、静态存储区 (1)分为数据区(只读数据区(代码区?在linux中又叫文本段)、读写数据区)、未初始化区(BSS)。 (2)它们都是在程序编译连接阶段确定的。 2、...
  • 静态存储和堆栈动态存储

    千次阅读 2014-12-02 23:03:36
    目标程序运行时的存储组织 从逻辑上看,在代码生成前,编译程序必须进行目标程序运行环境的设计数据空间的分配.程序在运行的时候需要得到一块内存空间让自己在上面运行,此空间需要包含目标代码目标代码运行时的...
  • 什么时候要用到动态存储呢?它在用的时候还要指定大小,和静态分配区别在哪呢?
  • 静态存储区主要保存 全局变量静态变量,栈存储调用函数相关的变量、地址等,堆存储动态生成的变量,在c中是指由malloc,free运算产生释放的存储空间,在c++中 就是指newdelete运算符作用的存储区域。 1、 ...
  • 转自http://blog.csdn.net/yangdelong/archive/2010/04/03/5447362.aspx<br />文章来源 http://blog.csdn.net/shiwei0124/archive/2009/11/26/4877546.aspx<br />字符串的存储方式以及静态存储区域、栈、堆 在...
  • 1. 有些时候在运行时创建数组由于在编译时创建数组(有些时候不是这样, 比如使用... 对于这些值, 显然一次创建最恰当, 使用静态数组最合适, 当然使用动态数组也可以, 但是只需创建一次就可以了), 对于结构体也是这样.
  • 一、动态存储方式静态存储方式 上一节已介绍了变量的一种属性——作用域,作用域是从空间的角度来分析的,分为全局变量局部变量。 变量还有另一种属性——存储期(storage duration,也称生命期)。存储期是指变量...
  • C中的静态存储和动态存储区

    千次阅读 2013-03-12 15:17:13
    而内存主要分为两类:静态存储和动态存储区; 1.静态存储区分为:只读数据(READONLY DATA)区、以读写数据(RW DATA)区、未初始化区(BSS)。它们都是在程序编译连接阶段确定的,在程序执行的阶段不会改变。 ...
  • 动态存储方式静态存储方式 我们已经了解了变量的作用域。作用域是从空间的角度来分析的,分为全局变量局部变量。 变量还有另一种属性——存储期(storage duration,也称生命期)。存储期是指变量在内存中的...
  • 也称生命期)。存储期是指变量在内存中的存在期间。这是从变量值存在的时间角度来分析的。存储期可以分为静态存储期(static storage duration)和动态存储期(dynamic storage duration)。这是由变量的静态存储方式和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 759,905
精华内容 303,962
关键字:

动态存储方式和静态存储方式