C ++:什么占用更多内存,将单个字符存储为char或string?

时间:2017-02-20 00:21:58

标签: c++ string memory char

我正在编写代码,代码的不同部分根据用户输入执行。如果我确定用户只输入一个字符,字符串或字符会占用更多内存吗?从一种方式到另一种方式还有其他优点吗?

编辑: 这是我的意思的一个例子:

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

2 个答案:

答案 0 :(得分:3)

char只需一个字节 std::string至少需要sizeof(std::string)个字节,在现代PC上可能是24个字节。

在您的情况下,保存的内存很可能并不重要(因为保存将非常小,可能是23个字节),因此您应该坚持最佳描述您的意图。如果你需要一个字符,那么单个char就有意义了。

答案 1 :(得分:2)

  

什么占用更多内存,将单个字符存储为char或string?

根据定义,

char是系统上最小可寻址存储器单元的大小。因此,没有任何对象可以占用更少的内存。

String是一系列字符。单个元素数组的内存与单个元素完全相同:

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

但是,大多数字符串的使用要求字符串由空字符终止。只有一个字符串包含空终止符,并且适合单个字符数组:空字符串。

因此,除非用户输入的字符为null,否则字符串必须使用比单个字符更多的内存 - 如果需要将其终止为空。

如果您正在考虑std::string,除了包含字符本身的缓冲区之外,还包含一些指针(大多数系统上的字节大于)。 (尽管可以优化实现,以便不为小字符串分配外部缓冲区)

  

一个人还有其他优势吗?

std::string优于char的主要优点是前者可以表示任意长度的字符串,而不是单个字符。