首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >指针数组和页表的类比

指针数组和页表的类比

作者头像
码农UP2U
发布2026-03-16 18:24:17
发布2026-03-16 18:24:17
720
举报
文章被收录于专栏:码农UP2U码农UP2U

最近一直没有更新公众号,因为事情比较多,除了打工上班以外,还要处理以前遗留的一些事情。处理的一些事情真的挺头大、挺烦躁。后来经同学劝导,很多事情就索性不去想、不去琢磨了,结果,反而事情变顺当了。真的很神奇!

本篇文章谈一下 C 语言中的指针数组和 CPU 的页表的类比。

0x01:C 语言中的几个简单概念

以前学习 C 语言的时候,有一些概念好像很绕,但是仔细想想,与其说是绕,不如说是语文的理解能力有限。比如,数组指针和指针数组,还是函数指针和指针函数。对于 C 语言的老手自然是不会理解不了,但是对于初学者可能多少就有一些绕了。

毕竟初学的时候,可能指针本身的概念都理解不到位,再出现这么多种指针就更加的晕了。但是仔细想想还是比较好理解的。无非就是数组、指针、函数返回类型。即使不懂,稍加解释也还是能从字面理解的。

但是有的概念就不太好从字面理解了。

0x02:CPU 中的几个概念

在来看看 CPU 中关于分页的几个概念,先从 Intel 手册中截个图吧。

上图是 CPU 线性地址转换的一个图,当我们开启分页(其实分页是操作系统开启的,和我们无关)的时候,就要涉及到这些相关的知识。一张图里面就有很多名词,比如 CR3、PML4、PML4E、PDPTE、PDE、PTE。这些词在初学的时候就不太好记,理解还有点麻烦,但是实质它们之间的关系其实又不复杂。

上图的分页是按照 4K 进行分配的页的结构,还有按照 2M 进行分配的页的结构,还有按照 1G 进行分配的页的结构。这些名词、概念……虽然上面的这些概念很吓人,但是实质就是多级的数组指针数组。

0x03:指针数组和页表的类比

CPU 的分页机制其实和 C 语言的指针数组几乎就是同一个东西,其实就是同一个东西。除了像是指针数组外,如果用过在 CE 下找基址的话,其实我感觉也和这个很类似。

CR3 是 CPU 的一个控制寄存器,指向了顶级页表的基址,它其实就是一个数组指针。

至于 PML4、PDPT、PD、PT 就是数组,前面三个就是指针数组,依次指向它们的下级,它们是有层级关系的。最后一个是普通的数组,当然了这个数组里面存的也是指针,就是具体的物理内存地址了。

页表的整个层级只有 4 层吧,就是 4 级页表,主流的 Linux 好像也是四级页表吧。不过,新版的 Linux 中要更新到 5 级了~!

0x04:最后

看到这里以后感觉,很多专业的名词就是专业的壁垒吧。通过专业名词当做障碍,建立壁垒,从而给跨专业增加一些难度。甚至是同一个专业的不同分支也是这样吧。比如 C 语言的指针、汇编的寻址、上面提到的页表之类的。很多概念都是相同的,从内核的底层到上层的应用很多都是相通、甚至是相同的东西不同的表现,不过它们都是独立出现的,只有看明白他们的共性以后,才能豁然开朗!

推荐一部电影吧,谍网追凶https://pan.quark.cn/s/09acc390a644

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 源代码010 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档