C :占用更多内存,将单个字符作为char或字符串存储
C++: What takes up more memory, storing a single character as char or string?
我正在编写代码,其中代码的不同部分根据用户输入执行。如果我确定用户只会输入一个字符,字符串或字符是否会占用更多内存?还有其他一种方法的其他优势吗?
编辑:这是我的意思的示例:
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::string
比char
的主要优点是,前者可以代表任意长度的字符串,而不是单个字符。
相关文章:
- 为什么 Serial.println(<char[]>);返回随机字符?
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 使用 char 分隔符解析C++中的字符串,但将可重复的字符保留为每个解析的子字符串 (C++ STL) 中的分隔符
- 使用动态分配将 char* 复制到另一个字符**
- 为什么strlen(s)与s的大小不同,为什么cout-char显示的是字符而不是数字
- 打印标准::<char>不带无关字符的矢量
- 为什么char不是单个字符
- C++ char 类查找字符索引
- 在大小为 10 的 char 数组中输入超过 10 个字符的字符串并输出时,它会显示整个数组而不是前 10 个数组.为什
- 常量数组如何在每个元素中只能包含字符,而 char* 数组能够指向每个元素中的字符串?
- 为什么在 c++ 中分配 char 数组元素时,分配的字符会被销毁?
- 当对字符变量使用toupper()时,所述char变量输出多个字符.我该如何防止这种情况发生
- 第 5 行:字符 54:错误:调用"min(int,std::__cxx11::basic_string<char>::size_type)"没有匹配函数
- 将char类型指定给int以打印相应的ASCII字符
- 将字符串文本分配给字符*:const_cast<字符 *> 与使用 char 数组
- 如何稳定地将字符*转换为TAO::String_Manager_T<char>
- 错误:AES 加密密钥:从"char*"到"无符号字符"的转换无效
- 如何将ANSI字符(char)转换为Unicode字符(wchar_t),反之亦然
- 如何从矢量中获取字符 *<char>?