В одной критичной для времени части программы есть член класса, который выглядит так: std::vector m_vLinks; Во время профилирования я заметил, что около 99,98% исполнений этот вектор содержит только 0 или 1 элемент. Однако в очень редких случаях это может быть больше. Этот вектор определенно является узким местом по профилировщику, поэтому я думаю о следующей оптимизации:
- Создайте ручной класс с векторным интерфейсом
- Этот класс будет содержать истинный размер, один элемент и необязательный указатель на вектор
- В этом случае, когда вектор содержит 1 элемент, не будет никаких распределений динамической памяти, а также доступ к этому элементу будет (бит) быстрее из-за удаления одной косвенности.
- Когда нам нужно удерживать больше данных, вектор динамически выделяется
- Конечно, этот вектор не будет содержать один блок памяти, содержащий все элементы (не нужны здесь), а также некоторые операции будут более сложными
Прежде чем начать прототип этой вещи, чтобы узнать, помогает ли она, интересно, кто-нибудь сталкивался с пользовательскими контейнерами с аналогичной функциональностью в некоторых сторонних библиотеках?
Я уже думал о boost:: array, но не хочу, чтобы ограничение по размеру накладывало