您的位置:首页 > 其它

进程内存

2015-07-20 23:08 309 查看
进程内存结构

所有的进程都运行在自己的虚拟地址空间中,而每个进程都有自己的内存地址。

每个进程都运行在自己私有的内存空间中(虚拟地址空间)。在32位系统中,4GB的进程地址空间被分成用户空间(0~3GB)和内核空间(3GB~4GB)两部分。

代码段

保存可执行文件的操作指令和程序定义的常量全局只读变量(const),字符串常量
多进程能够共享相同的代码段,即当程序被多次执行时,运行的相同程序将共享代码段.


只读数据段

也有将常量、字面值和const声明的变量所存储的位置成为只读数据段,但是要注意**只读数据段** 与生命周期无关


数据段

在代码段的下方,分成初始化数据段和未初始化数据段(BSS段)。


栈内存

保存程序中创建的临时变量。函数调用时,传递的参数也被保存在栈中。在函数调用结束后,其返回值也保存在栈中。栈有先进先出的特点,适合于保护和恢复现场。可以把栈看作是临时存放数据、进行数据交换的内存区域。

从变量来看,局部变量(初始化的和未初始化的,但不包含静态变量)局部只读变量(const)

下面这张图来自《程序员的自我修养》



补充:从编译的角度

static变量无论是全局的还是局部的,都存在初始化数据段,为全局/静态区域,在编译期就为其分配内存。

全局变量同样,但是分是否初始化。

const全局变量存储在只读数据段,编译期最初将其保存在符号表中,第一次使用时为其分配内存,在程序结束时释放,例如:val_c;

const局部变量存储在栈中,代码块结束时释放,例如:val_j。

**const关键字并不能把变量变成常量(C专家编程21页)**const限定符只是说明这个符号不能被修改
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: