【问题标题】:Size of string variable字符串变量的大小
【发布时间】:2020-10-17 21:45:09
【问题描述】:

我有 2 个问题:

  1. 字符串变量使用多少 RAM?它是 28 字节,不管它包含多少个字符?
  2. 如果此类字符串的长度超过 28 个字符怎么办?是否需要多 2 倍(56 字节)?

【问题讨论】:

  • 注意sizeof()是一个编译时间常数。

标签: c++ string size


【解决方案1】:

字符串变量使用多少内存?

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    相关资源
    最近更新 更多