进程内存

来源:互联网 发布:硕士论文数据库 编辑:程序博客网 时间:2024/05/17 22:38
  1. 进程内存结构
    所有的进程都运行在自己的虚拟地址空间中,而每个进程都有自己的内存地址。
    每个进程都运行在自己私有的内存空间中(虚拟地址空间)。在32位系统中,4GB的进程地址空间被分成用户空间(0~3GB)和内核空间(3GB~4GB)两部分。
    代码段

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

    只读数据段

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

    数据段

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

    栈内存
    保存程序中创建的临时变量。函数调用时,传递的参数也被保存在栈中。在函数调用结束后,其返回值也保存在栈中。栈有先进先出的特点,适合于保护和恢复现场。可以把栈看作是临时存放数据、进行数据交换的内存区域。
    从变量来看,局部变量(初始化的和未初始化的,但不包含静态变量)局部只读变量(const)

下面这张图来自《程序员的自我修养》
这里写图片描述

补充:从编译的角度
static变量无论是全局的还是局部的,都存在初始化数据段,为全局/静态区域,在编译期就为其分配内存。
全局变量同样,但是分是否初始化。

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

**const关键字并不能把变量变成常量(C专家编程21页)**const限定符只是说明这个符号不能被修改

0 0
原创粉丝点击