Temporal locality: Here a resource that is referenced at one point in time is referenced again soon afterwards.
Spatial locality: Here the likelihood of referencing a storage location is greater if a storage location near it has been recently referenced.
Sequential locality: Here storage is accessed sequentially, in descending or ascending order.
The reason locality occurs is often because of the manner in which computer programs are created. Generally, data that are related are stored in consecutive locations in storage. One common pattern in computing is that processing is performed on a single item and then the next. This means that if a lot of processing is done, the single item will be accessed more than once, thus leading to temporal locality of reference. Furthermore, moving to the next item implies that the next item will be read, hence spatial locality of reference, since memory locations are typically read in batches.
Locality often occurs because code contains loops that tend to reference arrays or other data structures by indices.
Increasing and exploiting locality of reference are common techniques for optimization. This can happen on several levels of the memory hierarchy. Paging obviously benefits from spatial locality. A cache is a simple example of exploiting temporal locality, because it is a specially designed faster but smaller memory area, generally used to keep recently referenced data and data near recently referenced data, which can lead to potential performance increases. Data in cache does not necessarily correspond to data that is spatially close in main memory; however, data elements are brought into cache one cache line at a time. This means that spatial locality is again important: if one element is referenced, a few neighbouring elements will also be brought into cache. Finally, temporal locality plays a role on the lowest level, since results that are referenced very closely together can be kept in the machine registers. Programming languages such as C allow the programmer to suggest that certain variables are kept in registers.