进程内存布局

一. 概述

在长期计算机科学的发展中,程序在内存分区已经形成固定的布局。无论是在 Linux/Unix 下的应用程序,还是 Windows 下的程序,甚至是在没有操作系统下的底层程序,如 bootloader,以及 ARM 中单纯的 C 程序,它们都按大致固定的来进行布局。其他的开发语言,如 Java 也采用同样的布局方式。

二. 保存时的分段(可执行程序段的分配)

  • 代码段(Text Segment):存放 CPU 执行的机器指令(machine instructions),也就是程序代码编译后的机器代码。在内存中,这一段是只读的。所有可执行代码都会被编译到可执行段中。
  • 初始化数据段/数据段(Initialized Data Segment/Data Segment):存放静态初始化的数据,即有初始值的全局变量和 static 变量。数据将在此段中展开。
  • 未初始化数据段/bss段(Block Started by Symbol):存放未初始化的全局变量和 static 变量。在程序载入时由内核清0,所有未初始化的全局变量(包括静态&非静态)均保存在这个段中,实际上保存的是变量的标识符和大小。

注意:在可执行程序段中没有局部变量的空间,因为它们要在程序执行时,在进程的空间中的 Stack 区动态地被创建。

三. 分配实例


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值