PageTableCalculator - Calculate x64 Page table entries required for a given memory range


        


    
X64 - 4K 5 Level Paging

     63           57 56           48 47           39 38           30 29            21 20            12 11               0
     ┌──────────────┬───────────────┬───────────────┬───────────────┬────────────────┬────────────────┬──────────────────┐
     │ Sign         │  PML5E        │ PML4E         │Page Directory │ Page           │ Page           │Physical          │
     │ Extend       │  Offset       │ Offset        │Pointer        │ Directory      │ Table          │Page              │
     │              │               │               │Offset         │ Offset         │ Offset         │Offset            │
     └──────────────┴─┬─────────────┴─┬─────────────┴──┬────────────┴───┬────────────┴───┬────────────┴───┬──────────────┘
                      │9              │9               │9               │9               │9               │12
                      │               │                │                │                │                │
                      │  ┌─────┐      │  ┌─────┐       │  ┌─────┐       │  ┌─────┐       │  ┌─────┐       │  ┌─────┐
                      │  │     │      │  │     │       │  │     │       │  │     │       │  │     │       │  │     │
                      │  │     │      │  │     │       │  │     │       │  │     │       │  │     │       │  │     │
                      │  │     │      │  │     │       │  │     │       │  │     │       │  │     │       │  │     │
                      │  │     │      │  │     │       │  │     │       │  │     │       │  │     │       │  │     │
                      │  ├─────┤      │  ├─────┤       │  ├─────┤       │  ├─────┤       │  ├─────┤       │  ├─────┤
                      └─►│PML5E├───┐  └─►│PML4E│───┐   └─►│PDPE │───┐   └─►│PDE  │───┐   └─►│PTE  │───┐   └─►│ PA  │
                         ├─────┤   │52   ├─────┤   │52    ├─────┤   │52    ├─────┤   │52    ├─────┤   │52    ├─────┤
                         │     │   │     │     │   │      │     │   │      │     │   │      │     │   │      │     │
                  ┌─────►└─────┘   └────►└─────┘   └─────►└─────┘   └─────►└─────┘   └─────►└─────┘   └─────►└─────┘
                  │        4K              4K               4K               4K                4K               4K
                  │
                  │
                  │
                  │
63         52  51 │                               12 11            0
┌─────────────┬───┴─────────────────────────────────┬───────────────┐
│             │    Page-Map Level-4 or Level-5      │               │
│    MBZ      │          Table Base Address         │               │  CR3
│             │                                     │               │
└─────────────┴─────────────────────────────────────┴───────────────┘

1B      2^0    0x1
2B      2^1    0x2
4B      2^2    0x4
8B      2^3    0x8
16B     2^4    0x10
32B     2^5    0x20
64B     2^6    0x40
128B    2^7    0x80
256B    2^8    0x100
512B    2^9    0x200
------------------------------------------------------
1KB     2^10   0x400
2KB     2^11   0x800
4KB     2^12   0x1000
8KB     2^13   0x2000
16KB    2^14   0x4000
32KB    2^15   0x8000
64KB    2^16   0x10000
128KB   2^17   0x20000
256KB   2^18   0x40000
512KB   2^19   0x80000
------------------------------------------------------
1MB     2^20   0x100000
2MB     2^21   0x200000
4MB     2^22   0x400000
8MB     2^23   0x800000
16MB    2^24   0x1000000
32MB    2^25   0x2000000
64MB    2^26   0x4000000
128MB   2^27   0x8000000
256MB   2^28   0x10000000
512MB   2^29   0x20000000
------------------------------------------------------
1GB     2^30   0x40000000
2GB     2^31   0x80000000
4GB     2^32   0x100000000
8GB     2^33   0x200000000
16GB    2^34   0x400000000
32GB    2^35   0x800000000
64GB    2^36   0x1000000000
128GB   2^37   0x2000000000
256GB   2^38   0x4000000000
512GB   2^39   0x8000000000
------------------------------------------------------
1TB     2^40   0x10000000000
2TB     2^41   0x20000000000
4TB     2^42   0x40000000000
8TB     2^43   0x80000000000
16TB    2^44   0x100000000000
32TB    2^45   0x200000000000
64TB    2^46   0x400000000000
128TB   2^47   0x800000000000
256TB   2^48   0x1000000000000
512TB   2^49   0x2000000000000
------------------------------------------------------
1PB     2^50   0x4000000000000
2PB     2^51   0x8000000000000
4PB     2^52   0x10000000000000
8PB     2^53   0x20000000000000
16PB    2^54   0x40000000000000
32PB    2^55   0x80000000000000
64PB    2^56   0x100000000000000
128PB   2^57   0x200000000000000
256PB   2^58   0x400000000000000
512PB   2^59   0x800000000000000
------------------------------------------------------
1EB     2^60   0x1000000000000000
2EB     2^61   0x2000000000000000
4EB     2^62   0x4000000000000000
8EB     2^63   0x8000000000000000