#include #include int main(void) { const uint64_t vas_bits = 32; const uint64_t page_bits_small = 12; const uint64_t pte_bytes = 4; uint64_t num_pages_small = 1ULL << (vas_bits - page_bits_small); uint64_t pt_size_small = num_pages_small * pte_bytes; printf("32-bit address space, 4 KiB pages:\n"); printf(" Virtual pages: %llu\n", (unsigned long long)num_pages_small); printf(" Linear page-table size: %llu bytes (%.1f MiB)\n", (unsigned long long)pt_size_small, pt_size_small / (1024.0 * 1024)); const uint64_t page_bits_large = 14; uint64_t num_pages_large = 1ULL << (vas_bits - page_bits_large); uint64_t pt_size_large = num_pages_large * pte_bytes; printf("\nSame VAS, 16 KiB pages:\n"); printf(" Virtual pages: %llu\n", (unsigned long long)num_pages_large); printf(" Linear page-table size: %llu bytes (%.1f MiB)\n", (unsigned long long)pt_size_large, pt_size_large / (1024.0 * 1024)); printf("\nLarger pages shrink the table by the same factor but waste space inside pages.\n"); return 0; }