с одной стороны вектор и стринг жрут намного больше чем эррей и массив указателей на чар, но с другой стороны я изначально не знаю сколько у меня будет элементов
Нажмите, чтобы раскрыть...
Чудес не бывает. STL контейнеры тоже не знают, сколько у тебя будет элементов и если залезть к ним под капот, внутри все ровно идет выделение статических блоков памяти и перевыделение (например, для вектора) или довыделение (например, для списка) по мере заполнения.
Вопрос стоит в том, на сколько важен мизерный прирост (которого может и не быть, т.к. плюсы и стандартные контейнеры тоже не дураками сделаны).
есть ли смысл менять все типы данных на auto в коде? память будет жраться больше или наоборот меньше?
Нажмите, чтобы раскрыть...
auto - не тип данных, а ключевое слово, которое заменяется на соотв. тип, такой же, как у инициализирующего значения и применяется оно исключительно для удобства (например при переборе итераторов, чтобы не писать дрочево типа std::unordered_map< std::vector < int > >::iterator и т.д.)
Подводя итоги: в данной ситуации мне кажется, stl контейнеры + оптимизация компилятора дадут неплохой результат. Написание своего аллокатора и контейнеров - только сожрут кучу времени и, если и дадут небольшой прирост скорости на одной архитектуре, - они обязательно похоронят эту скорость на других, потому что оптимизация привязывается к конкретному железу.