2017-02-20 8 views
0

Я пишу код, где различные части кода исполняются в зависимости от ввода пользователя. Если я уверен, что пользователь будет вводить только один символ, будет ли строка или char занимать больше памяти? Есть ли какие-либо другие преимущества от одного пути к другому?C++: Что занимает больше памяти, сохраняя один символ как символ или строку?

EDIT: Вот пример того, что я имею в виду:

using namespace std; 
char operation;//or string 
cout << "enter the operator (+/=):" << endl; 
cin >> operation; 
if (operation == '+') { 
//do something 
} 
else { 
//do something else 
} 
+1

Опубликовать код, пожалуйста? –

+0

Это будет довольно сложно перетащить целую строку 'std :: string' в одинокий, единственный символ' char'. –

+1

У вас есть причины думать, что приложение голодает для памяти? Если нет, сделайте все, что вам будет легче. –

ответ

2

Что занимает больше памяти, сохраняя один символ как символ или строку?

char - это размер наименьшего адресуемого блока памяти в системе. Поэтому ни один объект не может занимать меньше памяти.

Строка - это последовательность символов. Массив одного элемента занимает ровно столько памяти, как один элемент:

char c = 'a'; 
char str[] = {'a'}; 
assert(sizeof c == sizeof str); 

Однако большинство использования строки символов требует, чтобы строка завершается нулевым символом. Существует ровно одна строка, которая включает в себя нулевой терминатор и помещается в массив одного символа: пустая строка.

Поэтому, если символ, который вводит пользователь, не имеет значения, строка должна обязательно использовать больше памяти, чем один символ, - если вам нужно, чтобы она была завершена с нулевым значением.


В случае, если вы рассматриваете std::string, который содержит несколько указателей (которые больше байта на большинстве систем) в дополнение к буферу, который содержит сами символы. (Хотя реализация может быть оптимизирована таким образом, чтобы для небольших строк не выделялся внешний буфер)

Есть ли другие преимущества одного над другим?

Основное преимущество std::string над char является то, что первые могут представлять строки произвольной длины, а не один символ.

3

char занимает один байт.
std::string занимает не менее sizeof(std::string) байт, что, вероятно, 24 байта на современном ПК.

В вашем случае сохраненная память, скорее всего, не имеет значения (потому что сохранение будет минимальным, вероятно, 23 байта), поэтому вы должны придерживаться того, что лучше всего описывает ваше намерение. Если вам нужен один символ, то смысл будет иметь один char.

+0

'sizeof (std :: string) == 28' на моей машине (VC++ 2015) – zett42

+0

Есть ли другие преимущества одного над другим? (например, производительность?) – kyczawon

+0

@kyczawon 'char', скорее всего, быстрее. – emlai

 Смежные вопросы

  • Нет связанных вопросов^_^