Vous voulez une sortie sans tampon chaque fois que vous voulez vous assurer que la sortie a été écrite avant de continuer. Un exemple est l'erreur standard sous une bibliothèque d'exécution C - elle est généralement non tamponnée par défaut. Comme les erreurs sont (espérons-le) peu fréquentes, vous voulez en être informé immédiatement. D'autre part, la sortie standard est simplement parce que l'on suppose qu'il y aura beaucoup plus de données qui passeront par là.
Un autre exemple est une bibliothèque de journalisation. Si vos messages de journalisation sont conservés dans des tampons au sein de votre processus, et que votre processus décharge le noyau, il y a de fortes chances que la sortie ne soit jamais écrite.
En outre, les appels système ne sont pas les seuls à être réduits au minimum, les entrées/sorties de disque le sont également. Disons qu'un programme lit un fichier un octet à la fois. Avec une entrée non tamponnée, vous irez sur le disque (relativement très lent) pour chaque octet, même si vous devez probablement lire un bloc entier de toute façon (le matériel du disque lui-même peut avoir des tampons, mais vous irez quand même sur le contrôleur du disque, ce qui sera plus lent que l'accès en mémoire).
Grâce à la mise en mémoire tampon, l'ensemble du bloc est lu dans la mémoire tampon en une seule fois, puis les octets individuels vous sont livrés à partir de la zone tampon (en mémoire, incroyablement rapide).
N'oubliez pas que la mise en mémoire tampon peut prendre plusieurs formes, comme dans l'exemple suivant :
+-------------------+-------------------+
| Process A | Process B |
+-------------------+-------------------+
| C runtime library | C runtime library | C RTL buffers
+-------------------+-------------------+
| OS caches | Operating system buffers
+---------------------------------------+
| Disk controller hardware cache | Disk hardware buffers
+---------------------------------------+
| Disk |
+---------------------------------------+