C ++中字符串的大小与char数组的大小
Size of string vs size of char array in c++
我必须编写一段代码并将其部署在内存有限的系统中 space,并且正在考虑 char 数组与 string 。我写了下面的代码来获得更好的想法。
string str="abcde";
char carray[6]={'a','b','c','d','e','[=10=]'};
cout <<"size of char array:"<< sizeof(carray) << endl ;
cout <<"size of string:"<< sizeof(str) << endl ;
我得到的输出是
size of char array:6
size of string:28
所以,我有 2 个问题
- 考虑到内存 space 紧张并且我的数组中的最大字符数不会更大,我能否得出结论,使用字符串将是一个愚蠢的想法,因为它需要更多 space比 10?
- 为什么字符串的大小显示为 28?依据是什么?
std::string
是 C++ 中的 class
对象。它的大小是实现定义的,但通常需要 space for at least 指向堆分配字符串的指针和大小。您看到的 sizeof(std::string)
可能特定于您的实现——但部分原因可能是小缓冲区优化,其中小字符串直接存储在字符串中。
一个 char
数组只是一个字符数组,所以 sizeof(arr)
总是字符数。
至于能不能用std::string
:看你的约束力了。 std::string
通常会为较大的字符串使用堆内存,这在极其受限的系统上可能很难证明是合理的。但是,大多数 std::string
实现也支持小型缓冲区优化字符串,其中这些字符串直接存储在 std::string
中,而不是通过堆内存间接存储
如果堆内存不合理,std::string
将不是一个好的解决方案。
但是,如果是这种情况,我建议您考虑采用现有的 static_string
实现,将大小编码为模板参数,或者至少编写您自己的实现。这比到处使用 char
数组要好,因为这很难长期管理。
我必须编写一段代码并将其部署在内存有限的系统中 space,并且正在考虑 char 数组与 string 。我写了下面的代码来获得更好的想法。
string str="abcde";
char carray[6]={'a','b','c','d','e','[=10=]'};
cout <<"size of char array:"<< sizeof(carray) << endl ;
cout <<"size of string:"<< sizeof(str) << endl ;
我得到的输出是
size of char array:6
size of string:28
所以,我有 2 个问题
- 考虑到内存 space 紧张并且我的数组中的最大字符数不会更大,我能否得出结论,使用字符串将是一个愚蠢的想法,因为它需要更多 space比 10?
- 为什么字符串的大小显示为 28?依据是什么?
std::string
是 C++ 中的 class
对象。它的大小是实现定义的,但通常需要 space for at least 指向堆分配字符串的指针和大小。您看到的 sizeof(std::string)
可能特定于您的实现——但部分原因可能是小缓冲区优化,其中小字符串直接存储在字符串中。
一个 char
数组只是一个字符数组,所以 sizeof(arr)
总是字符数。
至于能不能用std::string
:看你的约束力了。 std::string
通常会为较大的字符串使用堆内存,这在极其受限的系统上可能很难证明是合理的。但是,大多数 std::string
实现也支持小型缓冲区优化字符串,其中这些字符串直接存储在 std::string
中,而不是通过堆内存间接存储
如果堆内存不合理,std::string
将不是一个好的解决方案。
但是,如果是这种情况,我建议您考虑采用现有的 static_string
实现,将大小编码为模板参数,或者至少编写您自己的实现。这比到处使用 char
数组要好,因为这很难长期管理。