• [c++] 内存与变量


    内存

    • 程序代码区用来保存指令,常量区、全局数据区、堆、栈都用来保存数据
    • 常量区和全局数据区有时也被合称为静态数据区,意思是这段内存专门用来保存数据,在程序运行期间一直存在
    • 函数被调用时,会将参数、局部变量、返回地址等与函数相关的信息压入栈中,函数执行结束后,这些信息都将被销毁。所以局部变量、参数只在当前函数中有效,不能传递到函数外部,因为它们的内存不在了
    • 常量区、全局数据区、栈上的内存由系统自动分配和释放,不能由程序员控制。程序员唯一能控制的内存区域就是堆(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
  • 相关阅读:
    mysql 错误 1067: 进程意外终止
    VPS主机MSQL意外中断重启就好但10来个小时又中断的了如些反复
    使用hibernate连接mysql自动中断的问题
    40个国外联盟
    从服务里删除mysql
    外国广告联盟[16个]
    stm32学习笔记:GPIO外部中断的使用
    NO.2 设计包含min 函数的栈
    GPS数据,实测
    LATEX使用总结
  • 原文地址:https://www.cnblogs.com/cxc1357/p/10448365.html
Copyright © 2020-2023  润新知