首页 > 系统相关 >内存空间的布局以及全局变量和局部变量

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

时间:2024-07-28 18:56:07浏览次数:16  
标签:栈区 int 局部变量 内存空间 作用域 区域 全局变量

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

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

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

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

#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 ’ 关键字修饰时就成为静态局部变量,它会从栈区转移到全局区域。

标签:栈区,int,局部变量,内存空间,作用域,区域,全局变量
From: https://blog.csdn.net/2302_80638085/article/details/140701651

相关文章

  • C语言面向对象风格编程解惑-全局变量性能分析
    C语言面向对象风格编程解惑-全局变量性能分析如果你是CPP老手,但在软件开发过程中要求采用C语言作为主要语言,首先遇到的是各种设计模式不方便应用了,感到非常困扰,然后就是认命之后走向另外一个极端,常常会有过度使用全局变量和goto语句的问题。CPP既然是CWithClass,自然不会排斥面......
  • 局部变量类型注释不会引发 NameError
    在Python3.6中,语言中引入了新的变量注释但是,当类型不存在时,可能会发生两种不同的情况:>>>deftest():...a:something=0...>>>test()>>>>>>a:something=0Traceback(mostrecentcalllast):File"<stdin>",line......
  • 当值来自函数 python unittest 时,如何模拟全局变量
    我必须在python中模拟全局变量,但变量值来自另一个函数。当我导入文件时,这个函数正在运行,但我想要那里的模拟值。secrets.pyimporttracebackimportloggingimportboto3importosimportjsonlogger=logging.getLogger()logger.setLevel(logging.INFO)secret_......
  • 易优CMS模板标签global全局变量输出网站关键词
    【基础用法】标签:global描述:获取系统全局配置变量内容用法:{eyou:globalname='web_title'/}或者{$eyou.global.web_title}文件:系统模板引擎属性:name=''变量名涉及表字段:请查阅网站后台的【设置】-【基本信息】web_status关闭网站web_name网站名称web_logo网站LOGO......
  • C语言实现全局变量定义的实验
    constant.h文件内容:staticconstchartest_static_variable='a'; function_module.c文件内容:#ifndef__STDIO_H#define__STDIO_H#include<stdio.h>#endif#ifndef__CONSTANT_H#define__CONSTANT_H#include&quo......
  • Java基础,面向对象,类与对象,全局和局部变量,三大特征--封装,构造方法,JavaBean的编写---入
    一.面向对象面向过程和面向对象的区别     面向过程:强调步骤    面向对象:强调对象,对象洗衣机帮我们完成举例:洗衣服面向过程:面向对象:脱衣服->打开洗衣机->按钮->晾衣服面向对象的三大特征-----封装,继承,多态对象:万物皆可对象类:一组相关属性和行为的集......
  • C语言学习笔记(04)——内存空间的使用
    指针指针概述:内存类型资源的地址、门牌号的代名词指针只是个概念,要用还得用指针变量:存放指针这个概念的盒子C语言编译器对指针这个特殊的概念,有2个疑问?1、分配一个盒子,盒子要多大?​ 在32bit系统中,指针就是4个字节,指针大小都固定了,就是4字节,跟你指向什么类型没有关系2、盒子......
  • 电脑清理c盘内存空间怎么清理免费 怎么清理c盘的垃圾文件又不删除有用文件
    在计算机使用过程中,随着时间的推移,C盘空间可能会被各种临时文件、缓存和无用的注册表项占用。这不仅会导致C盘空间不足,还可能影响计算机的性能。那么怎么样清理C盘内存空间,怎么样清理C盘的垃圾避开系统文件呢?一、怎么样清理C盘内存空间通常我们会在电脑中进行各种操作,比如会......
  • 深入理解Java核心技术模块化局部变量类型推断
    本人详解作者:王文峰,参加过CSDN2020年度博客之星,《Java王大师王天师》公众号:JAVA开发王大师,专注于天道酬勤的Java开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯山峯转载说明:务必注明来源(注明:作者:王文峰哦)深入理解Java......
  • PostMan动态设置全局变量
    1.前言在开发过程中调试接口,一般都会使用PostMan。其中有几个变量可能是好几个接口共用的,就会出现频繁手动复制(ctrl+c)、粘贴(ctrl+v)的情况。这个过程得非常留意,生怕复制错了,或删减了某些东西,导致接口报错。总是这样复制就显得非常繁琐和麻烦了。那有没有办法可以让......