内存

  • 程序代码区用来保存指令,常量区、全局数据区、堆、栈都用来保存数据
  • 常量区和全局数据区有时也被合称为静态数据区,意思是这段内存专门用来保存数据,在程序运行期间一直存在
  • 函数被调用时,会将参数、局部变量、返回地址等与函数相关的信息压入栈中,函数执行结束后,这些信息都将被销毁。所以局部变量、参数只在当前函数中有效,不能传递到函数外部,因为它们的内存不在了
  • 常量区、全局数据区、栈上的内存由系统自动分配和释放,不能由程序员控制。程序员唯一能控制的内存区域就是堆(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. 基于k8s的集群稳定架构-转载

    基于k8s的集群稳定架构-转载 前言 我司的集群时刻处于崩溃的边缘,通过近三个月的掌握,发现我司的集群不稳定的原因有以下几点: 1.发版流程不稳定 2.缺少监控平台[最重要的原因] 3.缺少日志系统 ...

  2. [Fundamental of Power Electronics]-PART I-6.变换器电路-6.1 电路演化

    6.1 电路演化 第一章使用基本原理构建了buck变换器(图6.1).开关可以降低电压直流分量,低通滤波器可消除开关纹波.在CCM下,buck变换器的变换比为\(M=D\).buck变换器是最简单的, ...

  3. 2019年度CMMI V2.0性能报告

    2020年底,CMMI研究院发布<2019 CMMI V2.0 Performance Report Summary>,渠成团队进行了全文翻译并简单总结如下.(文末提供中英双版PDF下载) ...

  4. 阅读作业2&CI/CD调研

    说明 项目 内容 这个作业属于哪个课程 2021春季软件工程 (罗杰 任健) 这个作业的要求在哪里 个人阅读作业#2 我在这个课程的目标是 初步获得软件工程师的能力 这个作业在哪个具体方面帮助我实现目 ...

  5. Linux 用户和用户组管理(useradd userdel groupadd groupdel)

    Linux 用户和用户组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. Linux系统用户账户的 ...

  6. Tomcat集群 Nginx负载均衡 shell脚本实时监控Nginx

    第一步,安装Tomcat 系统环境:Centos7 第1步:下载tomcat安装包 tomcat官网:https://tomcat.apache.org/ 第2步:安装包上传至linux中 第3步:下 ...

  7. Java编程语言学习01-编写第1个Java程序

    JVM/JRE/JDK JVMJava虚拟机(Java Virtual Machine)它是运行所有Java程序的虚拟计算机有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上 ...

  8. 「HTML+CSS」--自定义加载动画【026】

    效果展示 Demo代码 HTML <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  9. Redis 面试必备知识点

    1.Redis 简介 是一个用 C 语言开发的,高性能的键值对数据库. 数据存在于内存,读写速度快. 可用来做缓存.分布式锁.消息队列. 提供多种数据类型来支持不同的业务场景. 支持事务.持久化.Lu ...

  10. 【Vue】Vue学习(四)-状态管理中心Vuex的简单使用

    一.vuex的简介 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.Vuex背后的基本思想,就是前面所说的单向数据流.图4就是Vuex实现单向数据流的示意图.    Store     ...