【发布时间】:2018-11-08 21:25:50
【问题描述】:
如果我声明了一个 std::string 类型的变量但没有初始化它,那么分配了多少内存?我知道,如果我将它初始化为“hello”,例如,将为每个字符保留一个字节加上一个用于空字符的字节,总共 6 个。是否在字符串类的某处定义了默认长度? (我尝试在字符串头文件中查找实际定义但不知道在哪里找到它)
【问题讨论】:
-
我们计算类本身所需的内存还是只计算它存储的数据?
-
查找实现的地方是它的默认构造函数和声明数据成员的地方,但绝不保证在实现或版本之间保持一致。
-
它可能是 0 字节,但它没有定义(据我所知)。并且不要混淆为数据分配的内存和为
std::string分配的内存(这是恒定的)。您是在问使用了多少内存还是分配了多少?而一些std::string的实现使用了小字符串优化,因此它可以使用std::string的内存直接存储短字符串,而不需要分配其他任何东西。这个问题有很多方法,很难知道你到底在问什么。 -
您是在询问某个特定平台上会发生什么、通常会发生什么或保证会发生什么?