статический массив структур, почему вызов bzero приводит к повышению производительности? - PullRequest
1 голос
/ 31 октября 2019

Я реализую книгу заказов на с ++. Я моделирую его после этой реализации , которая получила награды за скорость.

Причина, по которой это быстро, объясняется использованием статических массивов, так что вся книга заказов размещается в стеке, а не в куче.

Что меня удивило, так это значительное повышение производительности при инициализации массивов с помощью bzero. Ниже приведена функция init в связанной реализации c. Комментирование вызовов bzero приводит к примерно в 2-3 раза более медленной производительности, когда я предоставляю им образцы данных и измеряю результаты.

void init() {
  /* Initialize the price point array */
  bzero(pricePoints, (MAX_PRICE + 1) * sizeof(pricePoint_t));  

  /* Initialize the memory arena */
  bzero(arenaBookEntries, MAX_NUM_ORDERS * sizeof(orderBookEntry_t));

  ...
}

В моем коде C ++ мои статические массивы были записаны, как показано ниже. В C ++ 11 у меня сложилось впечатление, что установка массива = {} инициализирует его нулевыми значениями. Следовательно, я не думал, что мне нужно будет использовать bzero. Тестирование на примере данных показало, что моя реализация эквивалентна реализации c без bzero. Добавление вызова bzero в конструктор моего класса OrderBook привело к производительности, эквивалентной реализации C.

Итак, мой вопрос: почему использование bzero привело к более высокой производительности?

// header file
OrderBook {
   static PricePoint _price_points[MAX_PRICE / TICK_SIZE];
   static Order _orders[MAX_ORDERS]; 
}

//cpp file
PricePoint OrderBook::_price_points[MAX_PRICE / TICK_SIZE] = {}
Order OrderBook::_orders[MAX_ORDERS] = {};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...