首页 > 解决方案 > c++中字符串的大小与char数组的大小

问题描述

我必须编写一段代码并将其部署在内存空间有限的系统中,并且正在考虑 char arrays 与 string 。我编写了以下代码以获得更好的主意。

    string str="abcde";
    char carray[6]={'a','b','c','d','e','\0'};
    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. 我可以得出结论,使用字符串将是一个愚蠢的想法,因为它占用了更多的空间,因为内存空间很紧并且我的数组中的最大字符不会大于 10?
  2. 为什么字符串的大小显示为28?在什么基础上?

标签: c++arraysstdstring

解决方案


std::stringclassC++ 中的对象。它的大小是实现定义的,但通常至少需要空间来存储指向堆分配字符串的指针和大小。您看到的sizeof(std::string)可能特定于您的实现——但这可能部分是由于小缓冲区优化,其中小字符串直接存储在字符串中。

s数组char只是一个字符数组,所以sizeof(arr)总是字符数。


至于你是否可以使用std::string:这取决于你的约束程度。std::string通常将堆内存用于较大的字符串,这在极度受限的系统上可能很难证明是合理的。但是,大多数std::string实现也支持小缓冲区优化字符串,其中这些字符串直接存储在std::string而不是通过堆内存间接存储

如果堆内存不合理,std::string对您来说不是一个好的解决方案。

但是,如果是这种情况,我建议您考虑采用static_string将大小编码为模板参数的现有实现,或者至少编写自己的实现。这比在任何地方都使用数组要好char,因为这变得难以长期管理。


推荐阅读