内存

  • 程序代码区用来保存指令,常量区、全局数据区、堆、栈都用来保存数据
  • 常量区和全局数据区有时也被合称为静态数据区,意思是这段内存专门用来保存数据,在程序运行期间一直存在
  • 函数被调用时,会将参数、局部变量、返回地址等与函数相关的信息压入栈中,函数执行结束后,这些信息都将被销毁。所以局部变量、参数只在当前函数中有效,不能传递到函数外部,因为它们的内存不在了
  • 常量区、全局数据区、栈上的内存由系统自动分配和释放,不能由程序员控制。程序员唯一能控制的内存区域就是堆(Heap):它是一块巨大的内存空间,常常占据整个虚拟空间的绝大部分,在这片空间中,程序可以申请一块内存,并自由地使用(放入任何数据)。堆内存在程序主动释放之前会一直存在,不随函数的结束而失效。在函数内部产生的数据只要放到堆中,就可以在函数外部使用
  • 在32位环境下,Windows 默认会将高地址的 2GB 空间分配给内核(也可以配置为1GB),而将剩下的 2GB 空间分配给用户程序
  • 对于64位程序,内核占用最高的 248TB,用户程序占用最低的 8TB
  • 每个线程的栈都是独立的,所以一个进程中有多少个线程,就有多少个对应的栈,对于 Windows 来说,每个线程默认的栈大小是 1MB
  • 一个可执行程序就是一个进程,前面我们使用C语言编译生成的程序,运行后就是一个进程。进程最显著的特点就是拥有独立的地址空间
  • 程序是存储在磁盘上的一个文件,是指令和数据的集合,是一个静态的概念;进程是程序加载到内存运行后一些列的活动,是一个动态的概念

变量

1、变量属性:

  • 数据类型:整型,浮点型
  • 存储类别:静态,动态

2、变量分类:

  • 空间:作用域(局部,全局)
  • 时间:存储期(静态,动态)

3、内存空间划分:

  • 静态存储区(全局变量,加static声明的局部变量)
  • 动态存储区(函数形参,未加static声明的局部变量)

  静态存储区中的变量,在程序执行过程中占据固定的存储单元

  动态存储区中的变量,调用开始时分配存储空间,函数结束时释放空间

4、几种实际的变量定义:

  • 动态局部变量:函数中的一般变量
  • 静态局部变量:在函数中加static声明的变量
  • [静态]全局变量:加static声明的全局变量,只能用于本文件

注:

  1. 全局变量均为静态存储,加static只是限制了作用范围,也不存在动态全局变量的说法
  2. extern只用于声明已定义的全局变量,不能用于变量的定义
  3. 内部/外部变量是相对于函数来说的,相当于局部/全局变量
  4. 实际使用中的意义在于:函数调用时临时为变量分配存储单元(省内存);变量可被其他文件引用(省代码)

参考:

c++中变量分类

  • https://blog.csdn.net/u013921430/article/details/79279114
  • https://wenku.baidu.com/view/747cf817b307e87101f696aa.html

[c++] 内存与变量的更多相关文章

  1. [GO]变量内存和变量地址

    package main import "fmt" func main() { //每个变量都有两层含义,变量的内存和变量的地址 fmt.Printf("a = %d\n ...

  2. js中数据、内存、变量的概念及三者之间的关系

    目录 数据.内存.变量的概念及三者之间的关系 什么是数据 数据的特点 什么是内存 栈内存 堆内存 JS引擎如何管理内存 什么是变量 变量是普通类型时 变量是引用类型时 数据.内存.变量的三者之间的关系 ...

  3. JavaJavaScript之内存与变量初始化

    0.搞清三个概念:预加载与执行期:js变量存储(栈区与堆区):js变量的类型(引用类型(对象)与基本数据类型); JS在预编译时,对于函数的预加载方面,浏览器仅仅选择编译声明式函数(function ...

  4. js 作用域链&内存回收&变量&闭包

    闭包主要涉及到js的几个其他的特性:作用域链,垃圾(内存)回收机制,函数嵌套,等等 一.作用域链:函数在定义的时候创建的,用于寻找使用到的变量的值的一个索引,而他内部的规则是,把函数自身的本地变量放在 ...

  5. python初级 1 内存和变量

    一.回顾: 1.什么是程序 一堆指令的集合 2.回想一下猜数游戏程序的特征: 1)需要输入(input) 2)会处理输入(process) 3)产生输出(output) 二.程序的一般特征:输入.处理 ...

  6. 对Javascript中的对象Object改变内存及其变量改变的图解

    Object 存储变量时,变量属性的内存改变图解 左边: 对象的内存   中间:变量属性的内存   右边:属性值的内存 [图一]创建一个对象,存obj1 变量--里面存age 属性和属性值--12. ...

  7. Python初级 2 记住内存和变量的练习

    一.数据类型: 数字:3, 5, 100, 50.35 字符串:"abc","wang" 字符串或数字可以由名字来表示,名字也叫变量 二.算术表达式: 形如3 ...

  8. php变量内存完全释放

    <?php echo memory_get_usage().PHP_EOL;$a = 1;$b = $a;$a = null;$b = null;unset($a);unset($b);echo ...

  9. JavaScript变量作用域和内存问题(二)

    执行环境是js中特别重要的概念,是指变量或者函数可以访问其他数据,定义自己的行为.每个执行环境都有一个与之相对应的变量对象,执行环境中定义的所有变量和函数都保存在这个变量中,我们看不到这个变量,但是后 ...

随机推荐

  1. JS实现鼠标点击爱心&绘制多边形&每日一言功能

    本篇文章主要介绍我的个人博客 程序猿刘川枫 中页面使用的美化功能(基于JS实现): 1.鼠标点击出现不同颜色爱心特效 2.页面浮动多边形跟随鼠标移动 3.每日一言功能 1.鼠标点击出现爱心特效 经常在 ...

  2. java面试-线程池使用过吗,谈谈对ThreadPoolExector的理解

    一.架构说明: 二.为什么使用线程池,优势是什么? 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,那么超出数量的线程排队 ...

  3. BUAA_OO_第三单元

    一.JML初探 ​ JML(Java Modeling Language)作为一种形式化语言,可以约束Java代码中类和方法的状态和行为形成规格,通过将一系列具体代码实现抽象成明确的行为接口,可以形成 ...

  4. 电梯也能无为而治——oo第二单元作业总结

    oo第二单元作业总结 一.设计策略与质量分析 第一次作业 设计策略 在第一次作业之前,我首先确定了生产者--消费者模式的大体架构,即由输入线程(可与主线程合并)充当生产者,电梯线程充当消费者,二者不直 ...

  5. 『Spring Boot 2.4新特性』减少95%内存占用

    节省 95%的内存占用,减少 80%的启动耗时. GraalVM 是一种高性能的虚拟机,它可以显著的提高程序的性能和运行效率,非常适合微服务.最近比较火的 Java 框架 Quarkus 默认支持 G ...

  6. 西门子PLC开发笔记(一):PLC介绍,西门子S1200系列接线、编程、下载和仿真

    前言   西门西PLC.台达触摸屏.法兰克机床等等多年以前玩得比较多,改造机床.维修机床.给机床编程等等,没事还能扯个零件啥的,之前也没总结过,有时间就重新整理下.  本章后面以西门1200实物为例, ...

  7. os shutil 模块

    OS --- 操作系统接口 os.system(command) # 在python中执行系统指令 os.popen(command[, mode[, bufsize]]) #os.popen() 方 ...

  8. Mybatis(一)Porxy动态代理和sql解析替换

    JDK常用核心原理 概述 在 Mybatis 中,常用的作用就是讲数据库中的表的字段映射为对象的属性,在进入Mybatis之前,原生的 JDBC 有几个步骤:导入 JDBC 驱动包,通过 Driver ...

  9. Linux 基本防火墙设置和开放端口命令

    关闭防火墙 CentOS 7.RedHat 7 之前的 Linux 发行版防火墙开启和关闭( iptables ): 即时生效,重启失效 #开启 service iptables start #关闭 ...

  10. 【并发编程】Java中的锁有哪些?

    0.死锁 两个或者两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,若无外力作用,他们都将无法让程序进行下去: 死锁条件: 不可剥夺条件: T1持有的资源无法被T2剥夺 请 ...