码迷,mamicode.com
首页 > 其他好文 > 详细

变量的生存期和存储分配

时间:2018-11-22 00:24:00      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:全局变量   局部变量   数据   heap   reg   效率   类型   提高   内存   

  变量是内存空间的一种抽象,程序中定义的每个变量在运行时都有与之对应的内存空间。

  C++把变量占有的内存空间的时间段称为生存期,分为三类:静态生存期、动态生存期、自动生存期。

  全局变量具有静态生存期,局部变量和函数的参数一般具有自动生存期,对于具有动态生存期的变量,其内存空间一般用new操作分配,用delete操作收回,这样的变量称为动态变量,动态变量具有动态生存期。

  定义局部变量时,可以加上存储类型修饰符:auto、static或register来显式地指出他们的生存周期。局部变量的默认存储类型为auto;定义static存储类型的局部变量具有静态生存期;定义register存储类的局部变量也具有自动生存期,与auto存储类的局部变量的区别在于register是建议编译程序将相应的局部变量的空间分配在CPU的存储器中,目的是提高对局部变量的访问效率,当然,register类型的局部变量的存储空间也可以在CPU的寄存器中,或者内存中。

  当一个程序运行时,操作系统会为其分配一个内存空间,包括四个部分:静态数据区(static data)、代码区(code)、栈区(stack)和堆区(heap,或称自由存储区,free store),如下图所示(不同操作系统的顺序会不同)。

技术分享图片

在程序的内存空间中,静态数据区用于全局变量、static存储类的局部变量以及变量的内存分配; 代码区用于存放程序的指令,对于C++,代码区存放的是所有函数的代码;栈区用于auto存储类的局部变量、函数的参数,及函数调用时的有关信息(如函数的返回地址等)

 

变量的生存期和存储分配

标签:全局变量   局部变量   数据   heap   reg   效率   类型   提高   内存   

原文地址:https://www.cnblogs.com/guojun-junguo/p/9998236.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!