两种内存映射:普通文件和匿名文件

本文介绍了可执行文件如何通过内存映射加载到内存中,包括.data和.text段的映射。在CPU首次访问时,可能发生缺页中断,将磁盘页面缓存到内存。同时,堆、栈和.bss段作为匿名文件映射,不直接与磁盘文件对应,而是使用二进制零填充。.bss段在运行时才分配空间并初始化。

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

普通文件

将可执行文件加载到内存中,进行的映射是普通文件的映射。比如.data段、.text段等。在cpu第一次访问相关页面的时候,发生缺页中断,才真正将磁盘中的页面缓存到物理内存中。

匿名文件

堆、栈、.bss都是匿名文件映射。虚拟页面并不和磁盘中的文件发生映射。CPU第一次引用一个区域内的匿名页面时,发生缺页中断,从物理内存中找一个空闲页面(也可能要找牺牲页,写回),用二进制零来覆盖页面,将这个虚拟页面标记为驻留在内存中。

这就是所谓的匿名文件是由内核创建的,包含的全是二进制零

对于.bss段,不占据实际的磁盘空间,只在段表中记录大小,在符号表中记录符号。当文件加载运行时,才分配空间以及初始化。这就是csapp中提到的如果区域比文件区大,就用零来填充这个区域的余下部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值