Позвольте мне кратко суммировать код. Он написан на чистом C.
Код: Выделить всё
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
...
}
Код: Выделить всё
arenaPtr = arenaBookEntries;Таким образом, на протяжении всей программы она читает и записывает в статически выделенную область ArenaBookEntries[MAX_NUM_ORDERS] широко. Моя интуиция подсказывает, что из-за частого доступа массив уже будет более или менее находиться в кэше L1 или L2, что делает чтение и запись быстрыми и реже требует обращения к оперативной памяти для выборки.< /p>
Мое предположение: это потому, что, поскольку *arenaPtr является статической переменной и ее место выделяется отдельно (не в куче и не в стеке), поэтому она всегда будет там один раз загружено?
Ссылка на полный исходный код: https://github.com/YukunJ/LimitOrderBoo ... g_engine.c
Подробнее здесь: https://stackoverflow.com/questions/793 ... into-cache
Мобильная версия