进程内存布局

本文概述了计算机程序在内存中的固定布局,包括代码段、初始化数据段、未初始化数据段(bss段)、栈段和堆段。在程序运行时,栈用于存储局部变量和函数参数,而堆用于动态分配内存。进程的内存分区确保了不同部分的独立性,避免相互干扰。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 概述

在长期计算机科学的发展中,程序在内存分区已经形成固定的布局。无论是在 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 区动态地被创建。

三. 分配实例

#include <stdio.h>
int a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值