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

C++ C++;:什么会占用更多内存,将单个字符存储为char或string?,c++,string,memory,char,C++,String,Memory,Char,我正在编写代码,根据用户输入执行代码的不同部分。如果我确定用户只输入一个字符,字符串或字符会占用更多内存吗?从一种方式到另一种方式还有其他好处吗 编辑: 以下是我的意思的一个例子: using namespace std; char operation;//or string cout << "enter the operator (+/=):" << endl; cin >> operation; if (operation == '+') { //do s

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

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

using namespace std;
char operation;//or string
cout << "enter the operator (+/=):" << endl;
cin >> operation;
if (operation == '+') {
//do something
}
else {
//do something else
}
使用名称空间std;
字符操作//或字符串
cout操作;
如果(操作=='+'){
//做点什么
}
否则{
//做点别的
}

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


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

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,否则字符串必须比单个字符占用更多内存——如果需要以null结尾的话


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


两者之间还有其他优势吗

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

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

char
定义为系统上最小可寻址内存单元的大小。因此,任何对象都不能占用更少的内存

字符串是一个字符序列。单个元素的数组占用的内存与单个元素的内存完全相同:

char c = 'a';
char str[] = {'a'};
assert(sizeof c == sizeof str);
但是,字符串的大多数用法都要求字符串以空字符结尾。只有一个字符串包含空终止符,并且适合单个字符数组:空字符串

因此,除非用户输入的字符为null,否则字符串必须比单个字符占用更多内存——如果需要以null结尾的话


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


两者之间还有其他优势吗


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

请发布一些代码?将整个
std::string
推到一个单独的,single
char
。您是否有任何理由认为应用程序内存不足?如果不是,做任何对你来说都更容易的事情。@ OmidCompSCI C++字符串不使用4字节。一个字符将是一个字节。字符串是一个字符序列。在任何情况下,这怎么可能比单个字符占用更少的内存?请发布一些代码?将整个
std::string
塞进一个孤独的单个
char
。您有任何理由认为应用程序缺少内存吗?如果不是,做任何对你来说都更容易的事情。@ OmidCompSCI C++字符串不使用4字节。一个字符将是一个字节。字符串是一个字符序列。在任何情况下,这怎么可能比单个字符占用更少的内存呢?
sizeof(std::string)==28
在我的机器(VC++2015)上,一个字符比另一个字符有其他优势吗?(例如性能?@kyczawon
char
很可能更快。
sizeof(std::string)==28
在我的机器(VC++2015)上,一个比另一个有其他优势吗?(例如性能?@kyczawon
char
很可能更快。