Si quiero escribir programas en C que manejen la administración de memoria, ¿qué debo aprender?

Haz muchos dibujos. Dibuje los punteros, paso a paso, y asegúrese de que en cada paso todavía tenga todos los punteros que necesita limpiar más tarde.

Principalmente necesitas aprender a contar y a contar.
Todo lo que se ha asignado dinámicamente, debe ser desasignado. Curiosamente, esto es más difícil de lo que parece: cada pérdida de memoria fue causada por alguien que no realizó la cuenta atrás correctamente.

Muchas personas capacitadas en idiomas más recientes con recolectores de basura automáticos “olvidan” desasignar cosas, ya que el recolector de basura lo haría por usted.
En C este “lujo” no existe: si hace un desastre, lo limpia.

Aparte de eso, es principalmente malloc / free (o nuevo / eliminar si está haciendo más cosas de estilo C ++), entendiendo qué son los punteros, la diferencia entre * / & y cuándo usarlos. No es ciencia espacial.

Tendría que aprender sobre la pila y el montón y cómo C asigna memoria en cada uno de esos lugares. Los conceptos de memoria de C son bastante básicos, por lo que no es difícil de aprender.

Punteros, referencias, asignación dinámica, liberación (desasignación dinámica), memoria de puesta a cero (memset), etc. También estaría en una buena posición si entendiera los datos en sí mismos que se almacenan de manera que puedan involucrar el ancho, la alineación, el endianness, etc.

Realmente no hay mucho de eso.