Linux-虚拟地址空间分布-笔记

本文介绍了Linux系统下,内核进程与用户进程虚拟内存的比例,以及虚拟地址如何映射到物理地址。重点讨论了内核空间、栈、堆、BSS段、数据段和代码段在虚拟地址空间中的分布和作用,强调了栈溢出、内存管理和安全性方面的措施。

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

Linux系统下,内核进程和用户进程所占的虚拟内存比例为1:3;
windows系统下,内核进程和用户进程所占的虚拟内存比例为2:2(也可以修改为1:3);

虚拟地址通过页表映射到物理地址,页表由操作系统维护并被处理器引用。(Linux系统通过对栈、堆、内存映射段的起始地址加上随机偏移量来打乱布局,避免恶意程序通过计算访问栈、库函数等地址);

用户进程部分分段存储内容按照地址递减
用户进程部分分段存储内容按照地址递减:
内核空间: 内核总是驻留在内存中,其是操作系统的一部分。内核空间所占区域为内核所保留,不允许应用程序读写该区域或直接调用内核代码定义的函数。
栈: 又称为堆栈,由编译器自行分配释放。有三个用途1.为函数内部声明的非静态局部变量提供存储空间。2.栈帧或过程活动记录,记录函数调用过程相关的维护性信息,包括函数返回地址等等。3.临时存储区,用于存储长算术表达式部分计算结果。在linux中ulimit -s命令可以查看和设置堆栈的最大值,当程序使用超过该值时,发生栈溢出,程序会收到段错误,此时可向上或者向下调整栈的容量,这依赖于具体的实现。
堆: 堆用来存放进程运行时动态分配的内存段,可以动态扩张或者缩减(末端break指针标识,通过系统调用brk()和sbrk()来移动break指针以扩张堆),但是其内容是匿名的&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值