c++ input buffer output flush

c++ - ¿Qué significa el rubor el buffer?



clear buffer c (3)

Borrar el búfer mediante la salida de todo.

Estoy aprendiendo C ++ y me encontré con algo que no puedo entender:

buffers de salida pueden ser eliminados de forma explícita para forzar el tampón de ser escrito. Por defecto, la lectura de cin rubores cout ; cout también se vacía cuando el programa termina normalmente.

Así vaciar el búfer (por ejemplo, un búfer de salida): ¿Esto borra el búfer mediante la supresión de todo lo que contiene o se borrar el búfer mediante la salida de todo lo que contiene? O hace vaciar el búfer significa algo completamente diferente?


Que no escribe en un archivo. Esta es una operación costosa. Si en el código se escribe un byte a la vez, a continuación, cada escritura de un byte va a ser muy costoso. Por lo que una forma común para mejorar el rendimiento es almacenar los datos que usted está escribiendo en un buffer temporal. Sólo cuando hay una gran cantidad de datos es la memoria intermedia escrito en el archivo. Al posponer las escrituras, y escribir un bloque grande de una sola vez, se mejora el rendimiento.

Con esto en mente, vaciar el búfer es el acto de transferir los datos desde el búfer en el archivo.

¿Esto borra el búfer mediante la supresión de todo lo que contiene o se borrar el búfer mediante la salida de todo lo que contiene?

El último.


Usted ha citado la respuesta:

buffers de salida pueden ser eliminados de forma explícita para forzar el tampón de ser escrito.

Es decir, es posible que necesite "limpiar" la salida para hacer que se escriba en la secuencia subyacente (que puede ser un archivo, o en los ejemplos enumerados, un terminal).

En general, la salida estándar / cout se búffer de líneas: la salida no se ve envía al sistema operativo hasta que se escribe una línea nueva o explícitamente vaciar el búfer. La ventaja es que algo así como std::cout << "Mouse moved (" << px << ", " << py << ")" << endl hace que sólo una escritura en el ''archivo'' que subyace en lugar de seis, que es mucho mejor para el rendimiento. La desventaja es que algo así

for (int i=0; i<5; i++) { std::cout << "."; sleep(1); } std::cout << "/n";

es la salida "....." a la vez. En tales casos, tendrá que un adicional << flush para asegurar que la salida se visualiza.

La lectura de cin rubores cout por lo que no necesita una descarga explícita a ello:

std::string colour; std::cout << "Enter your favourite colour: "; std::cin >> colour;