IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c语言进程内存分布,及全局变量与局部变量 -> 正文阅读

[C++知识库]c语言进程内存分布,及全局变量与局部变量

进程映像

程序:存储在磁盘中的可执行文件(二进制文件,文本文件)
进程:在系统中运行的程序
进程映像:进程的内存的分布情况

进程的内存分布

text 代码段:

存储的是二进制指令、常量(字符串字面值),该内存段的权限为只读,一旦强行修改就会产生段错误。

data 全局数据段:

里面存储着初始化过的全局变量、静态变量。

bss 静态数据段:

里面存储着末初始化过的全局变量、静态变量,该内存段在程序执行前会被初始化为0。

heap 堆:

由于程序员手动管理,该内存无法与标识符建立映射关系(无法取名字),必须与指针配合使用。
优点:够大,分配和释放可控。
缺点:使用麻烦,容易产生内存泄漏、内存碎片。

stack 栈:

由系统自动管理,随着函数被调用,会自动分配内存,函数执行结束后自动释放内存。
优点:使用方便,采用栈结构方式管理安全,不会产生内存泄漏、内存碎片。
缺点:大小有限

全局变量和局部变量,块变量

全局变量: 定义在函数外的
存储位置: data(初始化过的)或者bss(未初始化过的)
生命周期: main函数运行开始前到程序结束才释放
作用范围: 程序中的任何位置

局部变量: 定义在函数内的
存储位置: stack栈内存
生命周期: 函数的定义语句开始,直到函数执行结束
作用范围:只能在本函数内使用

块变量: 定义在if\for\while等语句块内的变量
存储位置: stack栈内存
生命周期: 函数的定义语句开始,直到函数执行结束
作用范围:只能在语句块内使用

注意:局部变量和全局变量可以同名,但是会屏蔽同名的全局变量,同名块变量会屏蔽同名的局部变量和全局变量

类型限定符

auto:
早期用于定义临时变量(局部变量和块),C11标准中它可以用于定义自动推导类型的变量。

const:
显示的“保护”变量不被修改,const int num=10(可以用指针修改地址),若对 初始化过的全局变量修饰,则其存储位置从data段转移至text段(相当于常数)。

static:
被static修饰过的变量称为静态局部变量,局部全局变量

改变存储位置:
改变局部变量的存储位置,由stack改data或者bss(由是否初始化决定)
延长生命周期:
延长局部变量的生命周期,程序运行前到程序运行结束,不会随着函数的执行结束而释放。
限制作用范围:
限制全局变量、函数只能在本文件内使用
可以防止函数、全局变量重名、防止被别人调用

volatile:
编译器的取值优化,使用volatile修饰的变量不做取值优化

volatile int num = 10;
       if(num == num)
       {
           //可能为假,因为每次用到num时都会从内存中重新读取一次
       }

Register:
申请把变量的存储介质由内存转移到寄存器存储,如果能成功,数据的读取速度会大幅提升,寄存器数量有限,申请可能失败
Extern:
声明外部的全局变量,声明的变量已在别处定义过,请放心使用
但是只能临时通过编译,如果没有定义,链接时依然会报错
只是声明变量,不能赋值
Typedef
类型重定义,注意不是替换关系,定义变量时如果前面加上typedef,则变量名就变成了类型
typedef int num;

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-26 11:53:50  更:2021-07-26 11:54:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 5:30:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码