What every programmer should know about memory
Part 1 (Fundamentals)
Part 2 (CPU caches)
Part 3 (Virtual memory)
Part 4 (NUMA systems)
Part 5 (What programmers can do - cache optimization)
Part 6 (What programmers can do - multi-threaded optimizations)
Part 7 (Memory performance tools)
Part 8 (Future technologies)
Part 9 (Appendices and bibliography)