局部变量--->栈 全局变量--->数据区
int num = 5;
①占用空间大小 ②作用域(生命周期)③变量的存储区域
① ②③
计算机 CPU
内存 动态 掉电后丢失 存放 当前运行的数据
硬盘 静态 掉电后不丢失 存放固有的数据
内存↑ 运行效率↑ 换cpu贵 换主频:①功耗大②容易爆炸
程序 进程
硬盘 hello.c a.out ---------> 内存a.out
./a.out
内存中每个进程抽象4个G空间
内存:共享设备 稀缺资源
操作系统:管理资源
打印出来的地址是抽象出来的地址
虚拟空间(4G)通过MMU映射到物理内存(2M)
虚拟空间:
内核空间1G 内核 最高地址
栈空间 所在函数结束之后释放(未初始化给随机值) 存放局部变量 函数形参 自动变量
用户空间3G 堆空间 malloc ralloc calloc
数据区 整个函数结束之后再释放 bss:未初始化的全局变量(默认初始化为0) or:(only read)常量 char *src = "hello world"; 静态数据区:static 修饰变 量 初始化的全局变量
代码段 代码
栈空间:1、先进后出2、系统管理(程序员无法决定)
堆空间:1、先进先出2、用户管理
分配内存的3种方式:栈空间 堆空间 数据区
全局变量与局部变量重名时,局部变量起作用
① ②
定义:分配内存空间 只能定义一次
声明:不需要分配内存空间 可以声明多次
声明能提高编译效率
定义性声明:int count;
引用性声明:extern int count;