内存
变量
变量类型 | 作用域 | 生命周期 | 存储位置 |
---|---|---|---|
局部变量 | 函数内部 | 从变量创建到函数结束 | 栈区 |
全局变量 | 整个项目 | 从程序创建到程序销毁 | 数据区 |
静态局部变量 | 函数内部 | 从程序创建到程序销毁 | 数据区 |
静态全局变量 | 所处文件 | 从程序创建到程序销毁 | 数据区 |
函数
函数类型 | 作用域 | 生命周期 | 存储位置 |
---|---|---|---|
全局函数 | 整个项目 | 从程序创建到程序销毁 | 代码区 |
静态函数 | 所处文件 | 从程序创建到程序销毁 | 代码区 |
内存分区
-
代码区(text)
存放可执行文件的二进制代码(函数)
-
数据区
-
初始化数据区(data)
存放已初始化的静态数据、已初始化的全局数据
-
未初始化数据区(bss)
存放未初始化的静态全局数据、未初始化的全局数据
-
常量区
存放字符串常量及其他常量数据
-
-
栈区(stack)
存放局部变量、函数信息、函数参数、函数返回值等信息
-
堆区(heap)
动态分配内存
分配内存规则
- 在内存中,从低地址到高地址:依次为代码区、数据区(常量区,初始化数据区、未初始化数据区)、堆区、栈区分配内存空间
- 在代码区、数据区、堆区中分配内存是从低地址到高地址,但在栈区是从高地址到低地址分配内存