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;
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