Directe toewijzing is een cachegeheugenontwerp waarbij elk geheugenadres wordt toegewezen aan een specifieke cacheregel. Dit betekent dat er voor elk geheugenadres slechts één mogelijke cachelocatie is. Directe mapping is eenvoudig te implementeren en heeft weinig hardware-overhead, maar kan tot cacheconflicten leiden als meerdere geheugenadressen aan dezelfde cacheregel worden toegewezen.
Om de cacheregelindex voor een bepaald geheugenadres te berekenen, wordt het geheugenadres gedeeld door de cacheregelgrootte. De rest van deze verdeling is de cacheregelindex. Als het geheugenadres bijvoorbeeld 0x100 is en de cacheregelgrootte 16 bytes is, dan is de cacheregelindex 4.
De directe toewijzingsfunctie wijst een geheugenadres toe aan een cacheregelindex volgens de volgende formule:
```
cacheLineIndex =geheugenadres mod cacheLineSize
```
Waar:
* cacheLineIndex is de cacheregelindex
* geheugenadres is het geheugenadres
* cacheLineSize is de cachelijngrootte
Hier is een voorbeeld van hoe direct mapping werkt. Overweeg een cache met een cacheregelgrootte van 16 bytes. De volgende tabel toont de geheugenadressen die aan elke cacheregelindex zijn toegewezen:
| Cachelijnindex | Geheugenadressen |
|---|---|
| 0 | 0x000, 0x010, 0x020, ..., 0x0F0 |
| 1 | 0x100, 0x110, 0x120, ..., 0x1F0 |
| 2 | 0x200, 0x210, 0x220, ..., 0x2F0 |
| 3 | 0x300, 0x310, 0x320, ..., 0x3F0 |
| ... | ... |
Laten we nu zeggen dat we toegang willen krijgen tot het geheugenadres 0x123. Om de cacheregelindex voor dit adres te berekenen, delen we 0x123 door 16. De rest van deze deling is 3. Daarom is de cacheregelindex voor het geheugenadres 0x123 3.
Volgens de bovenstaande tabel wordt de cacheregelindex 3 toegewezen aan de geheugenadressen 0x300, 0x310, 0x320, ..., 0x3F0. Daarom wordt het geheugenadres 0x123 toegewezen aan de cacheregel die de geheugenadressen 0x300, 0x310, 0x320, ..., 0x3F0 bevat. |