Understanding Memory in Computing: From Physical to Virtual