Что занимает больше памяти, сохраняя один символ как символ или строку?
char
- это размер наименьшего адресуемого блока памяти в системе. Поэтому ни один объект не может занимать меньше памяти.
Строка - это последовательность символов. Массив одного элемента занимает ровно столько памяти, как один элемент:
char c = 'a';
char str[] = {'a'};
assert(sizeof c == sizeof str);
Однако большинство использования строки символов требует, чтобы строка завершается нулевым символом. Существует ровно одна строка, которая включает в себя нулевой терминатор и помещается в массив одного символа: пустая строка.
Поэтому, если символ, который вводит пользователь, не имеет значения, строка должна обязательно использовать больше памяти, чем один символ, - если вам нужно, чтобы она была завершена с нулевым значением.
В случае, если вы рассматриваете std::string
, который содержит несколько указателей (которые больше байта на большинстве систем) в дополнение к буферу, который содержит сами символы. (Хотя реализация может быть оптимизирована таким образом, чтобы для небольших строк не выделялся внешний буфер)
Есть ли другие преимущества одного над другим?
Основное преимущество std::string
над char
является то, что первые могут представлять строки произвольной длины, а не один символ.
Опубликовать код, пожалуйста? –
Это будет довольно сложно перетащить целую строку 'std :: string' в одинокий, единственный символ' char'. –
У вас есть причины думать, что приложение голодает для памяти? Если нет, сделайте все, что вам будет легче. –