提问者:小点点

字符串变量的大小


我有两个问题:

  1. 字符串变量使用多少RAM? 它是不是28字节,不管它由多少个字符组成?
  2. 如果这样的字符串长度超过28个字符怎么办? 是否需要多2x(56字节)?

共1个答案

匿名用户

字符串变量使用多少RAM?

C++没有RAM的概念。 它只知道静态内存,自动内存和动态内存。 这些如何实现取决于操作系统和编译器的具体细节。

string对象通常存储在自动内存中(如线程堆栈中),除非您通过new运算符显式地将其分配到动态内存中(如堆中)。 如果字符串是用new分配的类/结构的成员,但它本身不是new'ed的,那么它就在自动内存中,只是碰巧受到动态内存的支持。

是不是28个字节,不管它由多少个字符组成?

在任何情况下,都会分配sizeof(string)字节数,根据string的特定实现,可能是28个字节,也可能不是28个字节。 但是是的,string对象的大小在编译时是固定的,在运行时不会改变,无论字符串中存储了多少字符。

如果这样的字符串长度超过28个字符怎么办? 它是否需要更多的2倍(56字节)?

一个字符串的字符数据通常分配在动态内存中(除非长度较小且字符串实现了“短字符串优化”)。 分配的大小将始终是字符串容量(加上来自字符串分配器的一点开销)。 但是使用了多少容量取决于字符串的特定实现。 虽然容量可以随着字符的添加而增长,但每次增长多少则由实现决定。

相关问题