进程内存
2015-07-20 23:08
309 查看
进程内存结构
所有的进程都运行在自己的虚拟地址空间中,而每个进程都有自己的内存地址。
每个进程都运行在自己私有的内存空间中(虚拟地址空间)。在32位系统中,4GB的进程地址空间被分成用户空间(0~3GB)和内核空间(3GB~4GB)两部分。
代码段
只读数据段
数据段
栈内存
保存程序中创建的临时变量。函数调用时,传递的参数也被保存在栈中。在函数调用结束后,其返回值也保存在栈中。栈有先进先出的特点,适合于保护和恢复现场。可以把栈看作是临时存放数据、进行数据交换的内存区域。
从变量来看,局部变量(初始化的和未初始化的,但不包含静态变量)局部只读变量(const)
下面这张图来自《程序员的自我修养》
补充:从编译的角度
static变量无论是全局的还是局部的,都存在初始化数据段,为全局/静态区域,在编译期就为其分配内存。
全局变量同样,但是分是否初始化。
const全局变量存储在只读数据段,编译期最初将其保存在符号表中,第一次使用时为其分配内存,在程序结束时释放,例如:val_c;
const局部变量存储在栈中,代码块结束时释放,例如:val_j。
**const关键字并不能把变量变成常量(C专家编程21页)**const限定符只是说明这个符号不能被修改
所有的进程都运行在自己的虚拟地址空间中,而每个进程都有自己的内存地址。
每个进程都运行在自己私有的内存空间中(虚拟地址空间)。在32位系统中,4GB的进程地址空间被分成用户空间(0~3GB)和内核空间(3GB~4GB)两部分。
代码段
保存可执行文件的操作指令和程序定义的常量全局只读变量(const),字符串常量 多进程能够共享相同的代码段,即当程序被多次执行时,运行的相同程序将共享代码段.
只读数据段
也有将常量、字面值和const声明的变量所存储的位置成为只读数据段,但是要注意**只读数据段** 与生命周期无关
数据段
在代码段的下方,分成初始化数据段和未初始化数据段(BSS段)。
栈内存
保存程序中创建的临时变量。函数调用时,传递的参数也被保存在栈中。在函数调用结束后,其返回值也保存在栈中。栈有先进先出的特点,适合于保护和恢复现场。可以把栈看作是临时存放数据、进行数据交换的内存区域。
从变量来看,局部变量(初始化的和未初始化的,但不包含静态变量)局部只读变量(const)
下面这张图来自《程序员的自我修养》
补充:从编译的角度
static变量无论是全局的还是局部的,都存在初始化数据段,为全局/静态区域,在编译期就为其分配内存。
全局变量同样,但是分是否初始化。
const全局变量存储在只读数据段,编译期最初将其保存在符号表中,第一次使用时为其分配内存,在程序结束时释放,例如:val_c;
const局部变量存储在栈中,代码块结束时释放,例如:val_j。
**const关键字并不能把变量变成常量(C专家编程21页)**const限定符只是说明这个符号不能被修改
相关文章推荐
- 上海麻辣马资深程序员叶劲峰:我的游戏人生
- S3C2440时钟和电源管理
- Python filter()函数的用法
- CMSIS的简介
- AUTOMAKE 教程,
- Android中利用java反射机制Reflect
- 第一百零九天 how can I 坚持
- 数据库查询优化(转载)
- LINUX使用DVD光盘或者ISO作为本地YUM源
- 全自动化的 Android 编译管线
- Android数据库批量操作的性能优化
- 任笑萱 2015/7/16 个人文档
- Android自定义吐司
- Leetcode # 153 Maximum Product Subarray
- 《机器学习实战》(一)机器学习基础
- [Leetcode 164, Hard] Maximal Gap
- Python reduce()函数的用法
- Change the Central Administration Web site port number (SharePoint Foundation 2010)
- jdk学习之路---java泛型
- c014---函数指针,堆栈