Будет ли размер физической памяти, занимаемой вектором, таким же, как размер входного файла?
Это зависит от того, что вы подразумеваете под «размером физической памяти, занимаемой вектором» . Размер самого векторного объекта обычно равен 3 указателям (или 1 указателю и 2 числам), таким как 24 байта в 64-разрядной архитектуре. Однако вектор динамически выделяет пространство для как минимум N строковых объектов, где N - количество строк файла. Обратите внимание, что если вы не зарезервируете векторное пространство, он, вероятно, выделит больше места, чем для N строк.
Каждый строковый объект снова имеет некоторый «внутренний» размер (24 байта с libc ++ / Clang, 32 байта с libstdc ++ / GCC в моих экспериментах).
И затем каждая строка должна хранить текстовую строку. Он может выделять память динамически или для короткой строки может использовать оптимизация маленькой строки . При динамическом распределении памяти необходимо учитывать некоторые отступы, поскольку динамически распределенные буферы выровнены (в моей среде до 16 байт).
Поэтому вы не можете легко сравнить здесь занятия по памяти. Но, как правило, было бы много служебных данных с вектором строк.
Если вы хотите избежать этих издержек, просто прочитайте все содержимое файла в один массив символов (вектор, строку), а затем создайте дополнительный массив с указателями на то, где начинаются отдельные строки.