No es posible determinar todos los accesos a la memoria, ya que no tiene mucho sentido. Un acceso a la memoria podría estar ejecutando la próxima instrucción (el programa reside en la memoria), o cuando su programa lee o escribe una variable, por lo que su programa casi está accediendo a la memoria todo el tiempo.
Lo que podría ser más interesante para usted podría ser seguir el uso de la memoria de su programa (tanto en el montón como en la pila). En este caso, puede usar el comando estándar top.
También podría controlar las llamadas al sistema (es decir, escribir en el disco o adjuntar/asignar un segmento de memoria compartida). En este caso, debe usar el comando strace.
Un control más completo para hacer todo sería depurar su programa mediante el depurador gdb. Le permite controlar su programa, como establecer puntos de interrupción a una variable para que el programa se interrumpa cada vez que se lee o escribe (quizás esto es lo que estaba buscando). Por otro lado, GDB puede ser complicado de aprender, por lo que DDD, que es un frontend gráfico de gtk, te ayudará a comenzar con él.
Actualización: Lo que está buscando es realmente acceso de memoria de bajo nivel que no está disponible a nivel de usuario (esa es la tarea del kernel del sistema operativo). No estoy seguro de que incluso la administración de la caché L1 sea manejada de forma transparente por la CPU y escondida en el kernel. Lo que está claro es que debe bajar tanto como el nivel del núcleo, por lo que KDB, explicó here o KDBG, explicó here.
Actualización 2: Parece que el kernel de Linux hace manejar caché de la CPU, pero sólo caché L1. El libro Understanding the Linux Virtual Memory Manager explica cómo funciona la administración de memoria del kernel de Linux. This chapter explica algunas de las agallas del manejo de caché L1.