Фангенто Asked:2025-01-13 13:53:37 +0000 UTC2025-01-13 13:53:37 +0000 UTC 2025-01-13 13:53:37 +0000 UTC 为什么字符串对象有 24 个字节? C++ 772 sizeof表明对象本身string占用24字节。当你将光标悬停在代码中的某个对象上时,它是类似的(也许这个类的实现可能会根据编译器和IDE(我有MSVC)而有所不同)。指针占用8个字节+一个字符串大小为site_t8个字节的字段。 8 个字节还来自哪里?还有什么领域? c++ 1 个回答 Voted Best Answer HolyBlackCat 2025-01-13T21:03:00Z2025-01-13T21:03:00Z 如 中std::vector,第三个字段是capacity,即分配了多少内存。大小和容量都可以是数字,也可以是指针(指向数组的开头加上这个数字)。 所有三个主要实现都使用 SSO(即“短字符串优化”),即当字符串足够短时,它不会分配在堆上,而是直接写入(某些)这些字段的顶部。 如果在某些实现中sizeof(std::string) > 3 * sizeof(void *),他们为 SSO 添加了额外的字节,这些字节根本不用于长字符串。
如 中
std::vector,第三个字段是capacity,即分配了多少内存。大小和容量都可以是数字,也可以是指针(指向数组的开头加上这个数字)。所有三个主要实现都使用 SSO(即“短字符串优化”),即当字符串足够短时,它不会分配在堆上,而是直接写入(某些)这些字段的顶部。
如果在某些实现中
sizeof(std::string) > 3 * sizeof(void *),他们为 SSO 添加了额外的字节,这些字节根本不用于长字符串。