Skip to content

7. Why Offset is Used in Paging

If we stored the exact physical address of every byte, the table would be enormous. Instead a virtual address is split into a page number and an offset within the page:

Virtual Address = [ Page Number | Offset ]

The page table only needs to map page numbers to frame numbers; the offset is copied unchanged into the physical address (Physical = Frame_Number << page_bits | Offset). This shrinks the table from "one entry per byte" to "one entry per page" — e.g., with 4KB pages, one table entry covers 4096 bytes.