实战讲解Linux进程内存空间

哈喽,我是子牙,一个很卷的硬核男人

深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果,一年磨一剑,三年先后做了这些课程:手写JVM、手写OS、带你用纯汇编写OS、手写64位多核OS、实战Linux内核…

最近抽空把之前对Linux进程内存空间的研究整理了一下,分享给大家。依然,这篇文章与你以前看到的所有相关文章或视频都不同,无论是广度,还是深度,更重要的,我都会在Linux内核中证明给你看!

32位时代已经过去很久了,所以本篇文章为了保持干净整洁,只讲64位。32位与64位其实相差不大,甚至可以说,32位因为可操作内存空间更少,反而更复杂些,感兴趣的小伙伴举一反三,自行研究

阅读完本篇文章,这些问题你能得到答案:

  1. 一个进程的内存空间长啥样子
  2. 一个进程的用户空间、内核空间分别长啥样子
  3. 进程的用户空间与内核空间都有空洞(hole)吗?如何证明?
  4. 我们编写的一个C语言程序,是如何变成Linux进程的?
  5. malloc底层是如何实现的?什么时候是通过brk申请内存?什么时候是通过mmap申请内存?如何证明?
  6. 如何证明进程用户空间中的堆(heap)是向上增长的?
  7. 如何证明进程用户空间中的映射区(mmap)是向下增长的?
  8. Linux内核中与此知识点相关的资料或源码怎么看?
  9. 想独立研究Linux内核,能独立看得到Linux内核,有书或视频推荐吗?

混沌由此开

道生一,一生二,二生三,三生万物。本篇文章就从这个程序开始吧

这个程序包含了一个程序会使用内存的所有情况:未初始化的全局变量,初始化了的全局变量、静态字符串、函数参数、局部变量、通过mmap从映射区分配内存、通过malloc从堆区分配内存

来看下结果

接下来我们就来分析:不同的变量对应着不同的使用内存的情况,这些变量为什么是这样的值?它们都分布在Linux进程内存空间的哪个区域?

进程内存空间

一个64位进

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值