title: Why in x86-64 the virtual address are 4 bits shorter than physical (48 bits vs. 52 long)?
body: <p>In the book &quot;Low-Level Programming: C, Assembly, and Program Execution on Intel® 64 Architecture&quot; I read:</p>
  <blockquote>
  <p>Each virtual 64-bit address (e.g., ones we are using in our programs)
  consists of several fields. The address itself is in fact only 48 bits
  wide; it is sign-extended to a 64-bit canonical address. Its
  characteristic is that its 17 left bits are equal. If the condition is
  not satisfied, the address gets rejected immediately when used. Then
  48 bits of virtual address are transformed into 52 bits of physical
  address with the help of special tables.</p>
  </blockquote>
  <p>Why is there a difference of 4 bits between the virtual address and the physical address?</p>