Increasing the Locality of Memory Access Patterns by Low-Overhead Hardware Address Relocation