¿Qué significa el lavado de búfer en C++?

Un lavado de búfer es la transferencia de datos de la computadora desde un área de almacenamiento temporal a la memoria permanente de la computadora. Por ejemplo, si hacemos algún cambio en un archivo, los cambios que vemos en la pantalla de una computadora se almacenan temporalmente en un búfer. 
Por lo general, un archivo temporal aparece cuando abrimos cualquier documento de Word y se destruye automáticamente cuando cerramos nuestro archivo principal. Por lo tanto, cuando guardamos nuestro trabajo, los cambios que hemos realizado en nuestro documento desde la última vez que lo guardamos se eliminan del búfer y se almacenan de forma permanente en el disco duro.

En C++, podemos vaciarnos explícitamente para forzar la escritura del búfer. En general, la función std::endl funciona de la misma manera al insertar un carácter de nueva línea y vaciar la transmisión. stdout/cout tiene un búfer de línea, es decir, la salida no se envía al sistema operativo hasta que escribe una nueva línea o vacía explícitamente el búfer. Por ejemplo,

C++

// Causes only one write to underlying file
// instead of 5, which is much better for
// performance.
std::cout << a << " + " << b << " = " << std::endl;

Pero hay cierta desventaja algo así como, 

C++

// Below is C++ program
#include <iostream>
#include <thread>
#include <chrono>
 
using namespace std;
 
int main()
{
  for (int i = 1; i <= 5; ++i)
  {
      cout << i << " ";
      this_thread::sleep_for(chrono::seconds(1));
  }
  cout << endl;
  return 0;
}
The above program will output 1 2 3 4 5 at once.

Por lo tanto, en tales casos, se utiliza una función adicional de «vaciado» para garantizar que la salida se muestre de acuerdo con nuestros requisitos. Por ejemplo, 

C++

// C++ program to demonstrate the
// use of flush function
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;
int main()
{
   for (int i = 1; i <= 5; ++i)
   {
      cout << i << " " << flush;
      this_thread::sleep_for(chrono::seconds(1));
   }
   return 0;
}
The above program will print the 
numbers(1 2 3 4 5) one by one rather than once. 
The reason is flush function flushed the output 
to the file/terminal instantly.

Nota: 

  1. No puede ejecutar el programa en un compilador en línea para ver la diferencia, ya que dan salida solo cuando termina. Por lo tanto, debe ejecutar todos los programas anteriores en un compilador fuera de línea como GCC o clang.
  2. La lectura de cin vacía cout, por lo que no necesitamos una descarga explícita para hacer esto.

Referencias:  

Artículo relacionado: 
Uso de fflush(stdin) en C

Este artículo es una contribución de Shubham Bansal . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *