内存空间的布局以及全局变量和局部变量

在这里先了解两个概念:作用域和生命周期——

            作用域:定义了变量或函数的可访问性。它决定了在代码中的哪个部分可以访问到特定的变量或函数。

           生命周期:生命周期指的是变量或对象从创建到销毁的过程。     

      现在我们可以学习全局变量和局部变量了,这两者的最主要的区别就是作用域以及生命周期的不同:

#include<iostream>

int a = 10;     //全局变量

int main()
{
    int b = 5;  //局部变量
   
    return 0;
}

           全局变量的作用域是整个程序,因此在同一个程序中的不同文件的全局变量不能重名,而全局变量的生命周期从程序初始时开始,至程序终止时结束。

            局部变量的作用域是在一定的函数和代码块中,因此在同一个文件中的全局变量和局部变量是可以重名的,并且在同一函数中被调用时,作用域小的优先被调用。而它的生命周期也是自其被创建开始,至特定函数或代码块结束。

#include<iostream>
using namespace std;

int a = 10;   //全局变量

int main()
{
   int a = 5;  //局部变量

   cout<<a<<endl  输出结果为5

}


     注意被 ' static '  关键字修饰的是局部变量成为静态局部变量

 int main()

{
   int a;         局部变量
  
   static int a;  静态局部变量

   return 0;
}

     静态局部变量较局部变量只是生命周期被延长至程序结束,而作用域不变

          现在我们来了解一下在C++中的内存区域,一般来说,在我们运行程序的时候操作系统会给程序的不同部分 分配不同的内存空间,它包括一般有四个内存区域——分别是代码区域,全局区域,堆区(Stack)以及栈区(Heap)

        1.代码区域

         代码区域又被称为文本区域,它的主要作用是存储程序的二进制代码,包括机器指令等等,该区域的特点是” 只读 “,以防止程序意外地修改自己的指令。

         2.全局区域

         全局区域又称静态区,该区域被细分为三个区域——数据区,BSS(BSS Segment,Block Started by Symbol)区,常量区

          数据区存储的是已经初始化的全局变量和静态变量。

          BSS区存储的是没有初始化的全局变量和静态变量。

          常量区存储的是被 ' const ' 所修饰的常量,以及字符串常量等等。

           3.堆区

            用于动态内存分配的区域。该区域由程序员进行管理分配,可以使用 new / malloc 来申请动态内存空间,之后要及时使用 deldte / free 进行内存释放,否则出现内存泄漏,会导致系统的维护成本增加,降低电脑的性能。

           4.栈区

           栈区用于存储局部变量,函数参数,以及程序执行过程中的临时数据。栈区是由编译器自动分配和释放的,每当函数被调用时,都会在栈上为其分配一个新的栈帧,栈区中的数据是临时的,一旦函数执行完毕,对应的栈帧就会被释放,栈区中的数据也会被销毁。

         注意:局部变量在被 ‘ static ’ 关键字修饰时就成为静态局部变量,它会从栈区转移到全局区域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值