C :占用更多内存,将单个字符作为char或字符串存储

C++: What takes up more memory, storing a single character as char or string?

本文关键字:字符 char 存储 字符串 单个 内存      更新时间:2023-10-16

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

编辑:这是我的意思的示例:

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

a char采用一个字节。
std::string至少采用sizeof(std::string)字节,这可能是现代PC上的24个字节。

在您的情况下,保存的内存很可能并不重要(因为节省的时间很小,大概是23个字节),因此您应该坚持描述您意图的最佳方法。如果您需要一个字符,则单个char是有道理的。

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

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

字符串是字符的序列。单个元素的数组与单个元素一样多:

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

但是,字符串的大多数用法都要求字符串由空字符终止。恰好有一个字符串包含零终端器,并且适合单个字符的数组:空字符串。

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


如果您正在考虑使用std::string,则包含一些指示(大多数系统上的字节大),除了包含字符本身的缓冲区。(尽管可以优化实现该实现,以使得没有为小字符串分配外部缓冲区)

一个比另一个优点其他优点?

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

相关文章: