Temel kurallar aslında oldukça basittir. Zorlaştığı yer, kodunuza nasıl uygulanacağıdır.
Önbellek iki ilke üzerinde çalışır: Geçici konum ve mekansal konum. Birincisi, kısa bir süre önce belirli bir veri yığını kullandıysanız, muhtemelen yakında tekrar ihtiyacınız olacağı fikridir. İkincisi, verileri yakın zamanda X adresinde kullandıysanız, muhtemelen yakında X + 1 adresine ihtiyacınız olacaktır.
Önbellek, en son kullanılan veri yığınlarını hatırlayarak bunu karşılamaya çalışır. Genellikle 128 bayt büyüklüğünde önbellek satırlarıyla çalışır, bu nedenle yalnızca tek bir bayta ihtiyacınız olsa bile, onu içeren önbellek satırının tamamı önbelleğe alınır. Daha sonra aşağıdaki bayta ihtiyacınız varsa, zaten önbellekte olacaktır.
Bu da, kendi kodunuzun her zaman bu iki konum biçiminden mümkün olduğunca yararlanmasını isteyeceğiniz anlamına gelir. Hafızanın her yerine atlamayın. Küçük bir alanda yapabildiğiniz kadar çok iş yapın ve sonra bir sonrakine geçin ve orada olabildiğince çok iş yapın.
Basit bir örnek, 1800'ün cevabının gösterdiği 2D dizi geçişidir. Her seferinde bir satır geçerseniz, belleği sırayla okursunuz. Sütun olarak yaparsanız, bir girişi okur, ardından tamamen farklı bir yere (bir sonraki satırın başlangıcına) atlar, bir girişi okur ve tekrar atlarsınız. Ve nihayet ilk satıra döndüğünüzde, artık önbellekte olmayacak.
Aynı kural kod için de geçerlidir. Atlamalar veya dallar daha az verimli önbellek kullanımı anlamına gelir (çünkü talimatları sırayla okumuyorsunuz, ancak farklı bir adrese atlıyorsunuz). Tabii ki, küçük if ifadeleri muhtemelen hiçbir şeyi değiştirmez (sadece birkaç bayt atlarsınız, bu yüzden yine de önbelleğe alınmış bölgenin içinde kalırsınız), ancak işlev çağrıları genellikle tamamen farklı bir önbelleğe alınamayan adres. Son zamanlarda çağrılmadığı sürece.
Öğretim önbellek kullanımı genellikle bir sorundan çok daha azdır. Genellikle endişelenmeniz gereken şey veri önbelleğidir.
Bir yapıda veya sınıfta, tüm üyeler bitişik olarak düzenlenir, bu da iyidir. Bir dizide, tüm girişler de bitişik olarak düzenlenir. Bağlantılı listelerde, her düğüm tamamen farklı bir konuma atanır, bu da kötüdür. İşaretçiler genel olarak ilgisiz adreslere işaret etme eğilimindedir, bu da eğer başvuruyu geri çekerseniz önbellek kaçmasına neden olur.
Birden fazla çekirdeği kullanmak istiyorsanız, gerçekten ilginç olabilir, genellikle olduğu gibi, L1 önbelleğinde aynı anda yalnızca bir CPU'nun herhangi bir adresi olabilir. Bu nedenle, her iki çekirdek de sürekli olarak aynı adrese erişirse, adres üzerinde savaşırken sürekli önbellek kaybına neden olur.