获取std :: string大小的粗略上限

时间:2017-11-29 20:53:52

标签: c++ c++17

我考虑使用C ++ 17' std::variant以下类型:

  • 1个字节:bool;
  • 4个字节:整数和浮点值;
  • 2x 4字节:整数和浮点值;
  • 3x 4字节:整数和浮点值;
  • 4x 4字节:浮动值;
  • std::string

遗憾的是,C ++标准没有指定std::string的实现,只是描述了类的接口和相关行为。但是,对于最常用的编译器集合(MVC ++,Clang,GCC,icc等),是否可以获得其大小的粗略上界?我并不真正关心精确的上限,但我更想知道与已经最大的16字节类型相比的大小。我猜一个指针就足以实现std::string,但由于字符串优化很短,大小可能会大得多吗?

2 个答案:

答案 0 :(得分:2)

std::string的通常实现中有三个指针大小的对象,因此在32位体系结构上 12个字节 24个字节 64。

但是,某些实现添加调试功能或类似的东西,大小约为4个指针。在我使用的通用平台/编译器上,我没有看到除了这两个选项之外的任何其他选项(诚然,没有任何异国情调。)

答案 1 :(得分:1)

在编译器资源管理器上尝试这段代码,然后选择各种编译器:

#include <string>

size_t size()
{
  return sizeof(std::string);
}

https://godbolt.org/g/NTWsuk

例如,可能的结果是:

size():
        mov     eax, 32
        ret

意味着std::string的大小为32个字节。