Какая польза от помещения часто используемого адреса массива в кеш?Linux

Ответить
Anonymous
 Какая польза от помещения часто используемого адреса массива в кеш?

Сообщение Anonymous »

Недавно я просматривал чью-то реализацию книги лимитных ордеров. Есть одно место, где автор оставил комментарий, и я не совсем понимаю, какую пользу это принесет с точки зрения производительности.
Позвольте мне кратко суммировать код. Он написан на чистом 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»