Direktmappning är en cacheminnesdesign där varje minnesadress mappas till en specifik cache-linje. Det betyder att det bara finns en möjlig cacheplats för varje minnesadress. Direktmappning är enkel att implementera och har låg hårdvaruoverhead, men det kan resultera i cachekonflikter om flera minnesadresser mappas till samma cache-linje.
För att beräkna cache-linjeindexet för en given minnesadress delas minnesadressen med cache-radens storlek. Resten av denna division är cache-linjeindexet. Till exempel, om minnesadressen är 0x100 och cache-radstorleken är 16 byte, är cache-radindex 4.
Direktmappningsfunktionen mappar en minnesadress till ett cache-linjeindex enligt följande formel:
```
cacheLineIndex =memoryAddress mod cacheLineSize
```
Där:
* cacheLineIndex är cache-linjeindexet
* minnesadress är minnesadressen
* cacheLineSize är cacheminnets storlek
Här är ett exempel på hur direkt kartläggning fungerar. Tänk på en cache med en cache-radstorlek på 16 byte. Följande tabell visar minnesadresserna som mappas till varje cachelinjeindex:
| Cachelinjeindex | Minnesadresser |
|---|---|
| 0 | 0x000, 0x010, 0x020, ..., 0x0F0 |
| 1 | 0x100, 0x110, 0x120, ..., 0x1F0 |
| 2 | 0x200, 0x210, 0x220, ..., 0x2F0 |
| 3 | 0x300, 0x310, 0x320, ..., 0x3F0 |
| ... | ... |
Låt oss nu säga att vi vill komma åt minnesadressen 0x123. För att beräkna cache-linjeindexet för denna adress delar vi 0x123 med 16. Resten av denna division är 3. Därför är cache-linjeindexet för minnesadressen 0x123 3.
Enligt tabellen ovan mappas cache-linjeindex 3 till minnesadresserna 0x300, 0x310, 0x320, ..., 0x3F0. Därför mappas minnesadressen 0x123 till cacheraden som innehåller minnesadresserna 0x300, 0x310, 0x320, ..., 0x3F0.