title: How to interpret memory addresses?
body: <p>When I print out the address of different memory regions I get values like 0xda2280, 0x7f8a494f9010 etc. And these point to different bytes in memory. </p>
  
  <p>1) But why are the ranges so large? Would each address in between have been addressable that would mean that I'd have over 140TB of memory. How do I interpret this?</p>
  
  <p>2) Most of the times the addresses are grouped within high and low addresses (heap and stack). But sometimes I see three different regions, clearly separated. What is this third memory region? </p>