A circular buffer is either a type of hardware circuit or an area of computer memory that is used to store incoming information. It is a fixed-size buffer and can be understood as a data structure that uses a buffer as if it were linked from one end to the other. It is called a circular buffer because it gives the appearance of circularity. Adding more information when the buffer is full causes it to overwrite the first element stored in the buffer. It is also called a ring buffer or a cyclic buffer.
An easy way to understand a circular buffer is to imagine a line in a bus station. Data is always added to one end of the line and is always removed from the other end. The head of the line is always the slot into which information is added; the tail end of the line is the place from which information is removed. The tail and head give the appearance of being next to each other in the implementation in this type of buffer, though the buffer is, in actuality, just a block of memory. Unlike the line in a bus station, though, the size of the buffer is fixed, and it has a certain maximum capacity.
This means, when the buffer is full, it begins to overwrite data at the head. The maximum capacity of the buffer has to be set beforehand, and while this number might be altered at any time, all the existing data present in the buffer will be lost. Typically, sequential processes use cyclic buffers to exchange information, and the data entered by the one process is read by the other. The first process, called the producer, places data into the buffer, and the second process, known as the consumer, takes it out. Routines also use cyclic buffers for storing data temporarily.
The most advantageous attribute of a circular buffer is the way it stores data. Data isn't shuffled around when an object at the end of the line is removed. If the buffer were noncircular, all the data elements present in the buffer would have to shift positions when data was removed. A circular buffer can be thought of as a First In First Out (FIFO) type of buffer, while a standard buffer resembles a Last In First Out (LIFO) type of buffer.
As the circular buffer stores data in contiguous regions of memory, it enables random access of data quickly. This type of buffer is easy to debug and is extremely efficient. It serves as a cache area for storing a certain number of the last-included data. It's also possible to very quickly insert and remove data from both ends, making it ideal for numerous applications.