字符串变量的大小

Size of string variable

本文关键字:变量 字符串      更新时间:2023-10-16

我有两个问题:

  1. 字符串变量使用多少 RAM?它是 28 个字节,无论它由多少个字符组成?
  2. 如果此类字符串的长度超过 28 个字符怎么办?是否需要多 2 倍(56 字节(?

字符串变量使用多少 RAM?

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

string对象通常存储在自动内存中(例如在线程的堆栈上(,除非您通过new运算符在动态内存中(例如在堆上(中显式分配它。如果string是用new分配的类/结构的成员,但本身不是new的,那么它恰好在自动内存中,恰好由动态内存支持。

它是 28 个字节,无论它由多少个字符组成?

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

如果此类字符串的长度超过 28 个字符怎么办?是否需要多 2 倍(56 字节(?

string的字符数据通常分配在动态内存中(除非长度很小并且string实现了"短字符串优化"(。分配的大小将始终是stringcapacity(加上stringallocator的一点开销(。但是使用多少capacity取决于string的特定实现来决定。虽然capacity可以随着角色的添加而增长,但它一次增长多少取决于实现。