如何一眼就看出内存多大

本文最后更新于:2023年12月5日 晚上

通过内存地址快速知道内存大小

通过内存管理申请一个内存地址,这个内存地址属于 small 或 large 或 huge 内存,那如何判断呢?

page 4KB

chunk 2MB

small 小于等于 3KB 的内存。

large 大于 3KB 且小于等于(2MB-4KB)的内存,可以对应整数倍的 page。

huge 大于 2MB-4KB 的内存,可以对应整数倍的 chunk。

如果是 0x8 打头,

如果是 0xc 打头的,看两段

0x4 打头的是 large 内存。

如果一个内存是 2M 的整数倍,一定是 huge 内存。

2MB=2×1024*1024=2×2^10×2^10=2×2^20

16=2^4

(2×2^20) / 2^4

最终得到 2MB 的 16 进制是 200000

所以看到 0x…00000 这种后面是 5 个 0 的,然后看一看倒数第六位能否被 2 整除,就一定是 huge 内存。

例如:0x7ffff5e00000,它属于 huge 内存。

如果一个内存地址不是 2MB 的整数倍,那我们根据地址,去掉偏移,找到一个 chunk,另外我们也可以知道,它属于哪个 page(偏移除以 4K)。


如何一眼就看出内存多大
http://blog.lujinkai.cn/PHP/源码/如何一眼就看出内存多大/
作者
像方便面一样的男子
发布于
2020年12月9日
更新于
2023年12月5日
许可协议