我考虑使用C ++ 17' std::variant
以下类型:
bool
; std::string
。遗憾的是,C ++标准没有指定std::string
的实现,只是描述了类的接口和相关行为。但是,对于最常用的编译器集合(MVC ++,Clang,GCC,icc等),是否可以获得其大小的粗略上界?我并不真正关心精确的上限,但我更想知道与已经最大的16字节类型相比的大小。我猜一个指针就足以实现std::string
,但由于字符串优化很短,大小可能会大得多吗?
答案 0 :(得分:2)
std::string
的通常实现中有三个指针大小的对象,因此在32位体系结构上 12个字节, 24个字节 64。
但是,某些实现添加调试功能或类似的东西,大小约为4个指针。在我使用的通用平台/编译器上,我没有看到除了这两个选项之外的任何其他选项(诚然,没有任何异国情调。)
答案 1 :(得分:1)
在编译器资源管理器上尝试这段代码,然后选择各种编译器:
#include <string>
size_t size()
{
return sizeof(std::string);
}
例如,可能的结果是:
size():
mov eax, 32
ret
意味着std::string
的大小为32个字节。