A fixed-size log can keep the most recent events by overwriting the oldest slot.

Rolling Log

rolling_log.c
#include <stdio.h>

int main(void) {
    int extraEvent = ;
    int log[3] = {0, 0, 0};
    int events[4] = {1, 2, 3, extraEvent};
    int next = 0;

    for (int i = 0; i < 4; i++) {
        log[next] = events[i];
        next = (next + 1) % 3;
    }

    printf("next=%d log=%d,%d,%d\n", next, log[0], log[1], log[2]);
    return 0;
}
#include <stdio.h>

int main(void) {
    int extraEvent = ;
    int log[3] = {0, 0, 0};
    int events[4] = {1, 2, 3, extraEvent};
    int next = 0;

    for (int i = 0; i < 4; i++) {
        log[next] = events[i];
        next = (next + 1) % 3;
    }

    printf("next=%d log=%d,%d,%d\n", next, log[0], log[1], log[2]);
    return 0;
}
#include <stdio.h>

int main(void) {
    int extraEvent = ;
    int log[3] = {0, 0, 0};
    int events[4] = {1, 2, 3, extraEvent};
    int next = 0;

    for (int i = 0; i < 4; i++) {
        log[next] = events[i];
        next = (next + 1) % 3;
    }

    printf("next=%d log=%d,%d,%d\n", next, log[0], log[1], log[2]);
    return 0;
}
ring index The next write position wraps back to zero when it reaches the end of the array.
recent values The array stores a compact history without growing memory.