30 程序中的内存布局

1 程序文件的一般布局

  • 不同代码在可执行程序(没有栈、堆)中的对应关系

2 程序与进程

  • 程序和进程不同

    • 程序是静态的概念,表现形式为一个可执行文件
    • 进程是动态的概念,程序由操作系统加载运行后得到进程
    • 每个程序可以对应多个进程
    • 每个进程只能对应一个程序
  • 问题:包含脚本代码的文本文件是一种类型的可执行程序么?如果是,对应什么样的进程?

    • 是可执行程序,但不是直接的可执行程序。需要一个脚本解释程序

  • 文件布局在内存中的映射

  • 各个段的作用

    • 栈、堆 段在程序运行后才正式存在,是程序运行的基础
    • .bss 段存放的是未初始化的全局变量和静态变量
    • .text 段存放的是程序中的可执行代码
    • .data 段保存的是已经初始化了的全局变量和静态变量
    • .rodata 段存放程序中的常量值,如字符串常量
  • 程序术语的对应关系

    • 静态存储区通常指程序中的 .bss.data
    • 只读存储区通常指程序的 .rodata
    • 局部变量所占空间为上的空间
    • 动态空间上的空间
    • 程序可执行代码存放于 .text 段(也就是代码段),是只读的
  • 问题:同是全局变量静态变量,为什么初始化的和未初始化的保存在不同的段中?

    • 未初始化的变量全部加载为 0,已经初始化的变量有其对应的值,需要加载进行初始化,区分对待效率更高
posted @ 2020-10-06 17:58  nxgy  阅读(142)  评论(0编辑  收藏  举报