A type of cache in which data from any address can be stored in any cache location. The whole address must be used as the tag (the value that identifies a block of data in the cache). All tags must be compared simultaneously (associatively) with the requested address and if one matches then its associated data is accessed. This requires an associative memory to hold the tags which makes this form of cache more expensive. It does however solve the problem of contention for cache locations (cache conflict) since a block need only be flushed when the whole cache is full and then the block to flush can be selected in a more efficient way. The alternatives are direct mapped cache or set associative cache.