Page 1 of 1

Welchen Vorteil bietet es, häufig aufgerufene Array-Adressen in den Cache zu übertragen?

Posted: 17 Jan 2025, 09:24
by Guest
Vor Kurzem schaue ich mir die Implementierung des Limit Order Book von jemandem an. An einer Stelle hat der Autor einen Kommentar hinterlassen, und ich verstehe nicht ganz, wie sich das auf die Leistung auswirken soll.
Lassen Sie mich den Code kurz zusammenfassen. Es ist in reinem C geschrieben.

Code: Select all

typedef struct orderBookEntry {
t_size size;                     /* Order size                        */
struct orderBookEntry *next;     /* Next entry in the pricePoint list */
char trader[4];
} orderBookEntry_t;

/* Statically-allocated memory arena for order book entries. This data
structure allows us to avoid the overhead of heap-based memory allocation. */
static orderBookEntry_t arenaBookEntries[MAX_NUM_ORDERS];

static orderBookEntry_t *arenaPtr;

...

vod init() {
...
arenaPtr = arenaBookEntries;   // Bring the arena pointer into the cache
...
}

Code: Select all

arenaPtr = arenaBookEntries;
Das ist genau der Punkt, an dem ich hinsichtlich der Leistungsvorteile sehr verwirrt bin.
Also liest und schreibt es im gesamten Programm in die statisch zugewiesenen arenaBookEntries[MAX_NUM_ORDERS] ausführlich. Meine Intuition ist, dass sich das Array aufgrund des häufigen Zugriffs bereits mehr oder weniger im L1- oder L2-Cache befindet, wodurch Lese- und Schreibvorgänge schneller werden und seltener zum Abrufen in den RAM gewechselt werden muss.< /p>
Meine Vermutung: Liegt es daran, dass *arenaPtr eine statische Variable ist und ihr Platz separat zugewiesen wird (nicht auf dem Heap und nicht auf dem Stapel), sodass sie immer einmal dort sein wird? geladen?
Vollständiger Quellcode Link: https://github.com/YukunJ/LimitOrderBoo ... g_engine.c