Questo è solo un elenco off-the-head.
Concetti
- Località spaziale
- Località temporale.
- Modelli di accesso alla memoria facilmente prevedibili.
- Ad esempio, la lettura / scrittura di megabyte di dati in sequenza non è affatto inefficiente, poiché la CPU può prevedere il prossimo indirizzo e leggere automaticamente in anticipo.
Programmazione dei costrutti del linguaggio.
- Direttive di allineamento dei dati.
- Passaggio tra array di strutture e strutture di array.
- Contenitori di dati vettorizzati forniti da librerie ad alte prestazioni.
Il compilatore ha già svolto parte del lavoro per te. Ad esempio, i gruppi di funzioni strettamente correlati (ad esempio, che potrebbero essere chiamati in sequenza successiva) verranno compilati in istruzioni binarie e quindi archiviati l'uno vicino all'altro, in modo che risiedano all'interno dello stesso blocco di pagine 4KB. Non c'è semplicemente alcun modo per uno sviluppatore di soddisfare tali dettagli manualmente.
Per i linguaggi compilati nativi, le variabili locali sono memorizzate nello stack e l'area più vicina alla posizione dello stack corrente è probabile che venga memorizzata nella cache. Se una grande variabile (diversi KB o più) viene allocata dallo stack, la CPU potrebbe dover rimuovere qualcos'altro dalla cache per fare spazio. D'altra parte, se la grande variabile viene usata molto frequentemente, allora l'allocazione dallo stack può essere giustificata.