title: Can I use some bits of pointer (x86_64) for custom data? And how if possible?
body: <p>From <code>$ cat /proc/cpuinfo  | grep address</code>:</p>
  
  <pre><code>address sizes   : 39 bits physical, 48 bits virtual
  address sizes   : 39 bits physical, 48 bits virtual
  </code></pre>
  
  <p>So, from my calculations pointer size is 64bits. 48bits are used to calculate physical address, and there are 16bits unused.</p>
  
  <p>Can these free 16 bits be used safely? </p>
  
  <p>If yes, then which are they? And how can they be used? Do I always have to bitmask the address, or something else?</p>
  
  <p><em>Disclaimer: I'm designing low level conventions for programming language that I am gonna make. I need to pass an extra tiny information with some pointers and I would like to squeeze it into pointer if possible.</em></p>