字符串变量使用多少RAM?
C++没有RAM的概念。 它只知道静态内存,自动内存和动态内存。 这些如何实现取决于操作系统和编译器的具体细节。
string
对象通常存储在自动内存中(如线程堆栈中),除非您通过new
运算符显式地将其分配到动态内存中(如堆中)。 如果字符串
是用new
分配的类/结构的成员,但它本身不是new
'ed的,那么它就在自动内存中,只是碰巧受到动态内存的支持。
是不是28个字节,不管它由多少个字符组成?
在任何情况下,都会分配sizeof(string)
字节数,根据string
的特定实现,可能是28个字节,也可能不是28个字节。 但是是的,string
对象的大小在编译时是固定的,在运行时不会改变,无论字符串中存储了多少字符。
如果这样的字符串长度超过28个字符怎么办? 它是否需要更多的2倍(56字节)?
一个字符串
的字符数据通常分配在动态内存中(除非长度较小且字符串
实现了“短字符串优化”)。 分配的大小将始终是字符串
的容量
(加上来自字符串
的分配器
的一点开销)。 但是使用了多少容量
取决于字符串
的特定实现。 虽然容量
可以随着字符的添加而增长,但每次增长多少则由实现决定。