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 个问题

  1. 考虑到内存 space 紧张并且我的数组中的最大字符数不会更大,我能否得出结论,使用字符串将是一个愚蠢的想法,因为它需要更多 space比 10?
  2. 为什么字符串的大小显示为 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 数组要好,因为这很难长期管理。