如何计算虚拟页数?32位虚拟地址与4K页大小的计算疑问
搞懂虚拟页数的计算逻辑
嘿,这个问题的核心是搞清楚虚拟地址的寻址单位,我来一步步给你掰扯明白:
- 首先得明确:32位的虚拟地址,指的是用32个二进制位来标记内存中的位置,每一个这样的地址对应的是一个字节的内存空间,而不是一个比特。所以整个虚拟地址空间的总大小是
2^32字节,而不是2^32比特。 - 页大小是4K字节,也就是
2^12字节。计算虚拟页数的本质,就是求总虚拟空间里能划分出多少个完整的页,所以用总空间大小除以每页的大小就行:(2^32 字节) / (2^12 字节) = 2^(32-12) = 2^20 页
你之所以会想到转成比特计算,应该是混淆了「地址的位数」和「地址空间的比特总量」。如果非要转成比特来算,那总虚拟空间的比特数是 2^32 * 8 = 2^35 比特,页的比特数是 2^12 * 8 = 2^15 比特,这时候算出来的页数是 2^35 / 2^15 = 2^20,结果其实是一样的,但你之前的错误在于直接把「32位地址」当成了「总空间为2^32比特」,这就搞错了总空间的计算逻辑。
总结一下:计算页数时,只要保证总空间和页大小的单位一致就没问题——要么都用字节,要么都用比特,但绝对不能把地址位数直接当成总空间的比特数来用哦!
内容的提问来源于stack exchange,提问作者Guilherme Gonçalves
相关产品推荐
相关产品推荐

