Arduino F (): que hace en realidad

He preguntado unpregunta similar antes, pero me doy cuenta de que no puedo hacer caras o colas de la macrología y la templateness. Soy un programador de C (en lugar de C ++).

¿Qué hace F () en realidad? ¿Cuándo mete personajes en pgmem? ¿Cuándo saca caracteres de pgmem? ¿Los guarda en caché? ¿Cómo maneja las situaciones de poca memoria?