these are buffers used by interrupt service routines
on the write side, the following indicates that an arduino program will be blocked if the buffer is full until space becomes available
// If the output buffer is full, there's nothing for it other than to
// wait for the interrupt handler to empty it a bit
i believe on the receive side, data will be lost if the buffers are filled if the arduino program doesn't not check/read the serial interface often enough (32 bytes takes ~32 msec at 9600 bps)
this line of code from HardwareSerial::_rx_complete_irq suggests that by using the mod operator (%) the compiler will optimize the code to simply mask (0x1f) the buffer index to minimize processing time w/in the ISR
rx_buffer_index_t i = (unsigned int)(_rx_buffer_head + 1) % SERIAL_RX_BUFFER_SIZE;