为什么 sizeof(string) == 32?

2023-12-07

导致 sizeof() 为 32 的字符串结构中的开销是多少?


Most modern std::string implementations1 save very small strings directly on the stack in a statically sized char array instead of using dynamic heap storage. This is known as Small (or Short) String Optimisation (SSO). It allows implementations to avoid heap allocations for small string objects and improves locality of reference.

此外,还将有一个std::size_t成员保存字符串大小和指向实际的指针char贮存。

具体实现方式有所不同,但大致如下:

template <typename T>
struct basic_string {
    char* begin_;
    size_t size_;
    union {
        size_t capacity_;
        char sso_buffer[16];
    };
};

在典型的架构中sizeof (void*)= 8,这给了我们 32 字节的总大小。


1 The “big three” (GCC’s libstdc++ since version 5, Clang’s libc++ and MSVC’s implementation) all do it. Others may too.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 sizeof(string) == 32? 的相关文章

  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 使用 C 语言使用 strftime() 获取缩写时区

    我看过this https stackoverflow com questions 34408909 how to get abbreviated timezone and this https stackoverflow com ques
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • Java 不可变对象 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在学习不变性的概念 据我了解 一旦创建对象 不可变对象就无法更改其值 但我不明白不可变对象的以下用途 They are 自动是线程
  • Java字符串查找和替换的最佳方法?

    我正在寻找 Java 中字符串查找和替换的最佳方法 这是一句话 我的名字叫米兰 人们都知道我叫米兰瓦西奇 我想用 Milan Vasic 替换 Milan 弦 但在我已经有 Milan Vasic 的地方 情况不应该是这样 搜索 替换后的结
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 如何从main方法调用业务对象类?

    我已将代码分为业务对象 访问层 如下所示 void Main Business object public class ExpenseBO public void MakeExpense ExpensePayload payload var
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • 为什么 JSON.parse("string") 失败

    根据JSON规范字符串是合法的 JSON 值 那么为什么会发生这种情况呢 你实际上是在传递赤裸裸的话语string到函数中 这当然不是有效的 JSON 要真正传递value string 你需要小心你的 JavaScript 尝试这个 JS
  • 查看完整网站,而非 iPhone 上的移动版本

    我有一个脚本可以检测您是否是 iPhone 用户并重定向到对 iPhone 更友好的页面 这很好用 但有一个问题 惯例是让用户能够查看full网页 但是 如果我链接到根目录 显然重定向会将它们发送到移动版本 有关如何包含的任何想法 请点击以
  • 将多行数据合并到一列中

    我有一个这样的数据 year Male 1 2011 8 2 2011 1 3 2011 4 4 2012 3 5 2012 12 6 2012 9 7 2013 4 8 2013 3 9 2013 3 我需要将 2011 年的数据分组到一
  • 如何在“func renderer(SCNSceneRenderer, nodeFor: ARAnchor) -> SCNNode”中旋转 SCNNode?

    因此 我能够在锚点位置放置一个盒子节点 现在 如何旋转场景中的 SCNNode 我试图修改节点的变换和 eulerAngles 但它们没有效果 func renderer renderer SCNSceneRenderer nodeFor
  • 位图图像处理

    我想使用 LockBits 方法替换 GetPixel 和 SetPixel 所以我遇到了这个F 惰性像素读取 open System Drawing open System Drawing Imaging let pixels image
  • Xquery 中的标记化

    如何标记特殊字符 例如 and 在 xquery 正如我正在努力Tokenize这些特殊字符 我无法做到这一点 你能建议我解决这个问题吗 您必须像在 XML 中一样转义 符号 tokenize string amp 或者 您也可以使用它的
  • 通过触摸或手势识别移动 RecyclerView

    我正在尝试移动和扩展 RecyclerView 以便内容在触摸输入的基础上占据全屏 我希望 RecyclerView 保持左右滚动的能力 我无法让 GestureDetector 与 RecyclerView 一起正常工作 捕获 onScr
  • iOS:在 uiimage 上具有发光/阴影效果的羽毛

    我正在尝试找到一种方法来应用带有阴影的羽毛效果UIImage not UIImageView我在iOS上遇到过 目前还没有找到完美的解决方案 我有一个想法 这可以通过屏蔽来完成 但我对这很陌生CoreGraphics 如果有人可以帮忙的话
  • 使用 django:代理设置

    我有一个使用 apache 的本地开发 django 设置 问题是 在部署服务器上没有代理 而在我的工作场所 我在 http 代理后面工作 因此请求调用失败 有没有什么方法可以使请求库中的所有调用都通过代理进行 我知道如何使用代理参数向各个
  • Spring事务通过连接多个数据库

    我正在尝试开发一个小程序 在该程序中我可以使用 Spring 连接到多个数据库 并尝试通过在 weblogic 服务器上部署我的 Web 应用程序来使用 Spring 事务 问题是事务管理无法正常工作 我试图在两个数据库中插入记录 第一个数
  • Identity Core 主键为 Int 无法使用 SignInManager

    我想做的是 使用 Identity Core 设置登录 注销 主键为 Int 我按照 ASP NET Core 文档中的以下文章进行操作 配置身份主键数据类型 他们使用 GUID 但想法是相同的 设置非常成功 ID 是整数并且数据库正在填充
  • 如何阻止递归复合组件递归地包含自身

    是否可以有一个具有 ui repeat 的 JSF 组件 并且在重复中调用相同的组件 这是因为我正在构建问题树
  • 使用vbscript将汉字写入文本文件

    我正在尝试使用以下命令将一些汉字写入文本文件 Set myFSO CreateObject Scripting FileSystemObject Set outputFile myFSO OpenTextFile getOutputName
  • Struts2中的tiles.xml中是否可以有动态值

    是否可以像在 Struts2 中的 struts xml 中那样在tiles xml 中传递动态值 我已经使用 parameter 来获取配置文件中的动态值 但它似乎不起作用 有任何想法吗 您可以将通配符从 struts 操作传递给图块 我
  • python 和 sqlite3,检查我是否可以使用 fts5 扩展?

    我最近发现FTS5扩展已发布 检查我的应用程序是否可以在用户系统上使用它的最佳方法是什么 只需检查 python3 版本 或根据 sqlite3 sqlite version 检查发布页面 或者是其他东西 这是之前对OP帖子的编辑 但我将其
  • 如何获取子元素的个数?

    我正在尝试计算 div 中具有 test 类的元素数量 我有 div ddd div class test 111 div another div div div div class test 222 div div class test
  • 将常量整数添加到 python 字典中的值

    如果满足某些条件 如何将常数 例如 1 添加到字典中的值中 例如 如果我有一本字典 dict 0 3 1 3 2 4 3 4 4 4 如果我只是想将整数 1 添加到字典中的每个值 那么它将更新 dict 如下 dict 0 4 1 4 2
  • 使用 Here 地图在 Android 中添加下载离线地图

    我已经开发了一个 Android Here 地图 它有一个简单的地图视图 但我需要向应用程序添加离线支持 如何将其添加到我的应用程序中以便让用户下载特定的国家或地区 请注意 我使用以下链接中的教程实现了我的应用程序 https develo
  • Eclipse 中奇怪的自动生成的 getter 和 setter

    当我在 Eclipse 中使用自动生成 getter setter 来生成名称如下的类字段时 String lAttr它会产生这个 public String getlAttr return lAttr public void setlAt
  • 为什么 sizeof(string) == 32?

    导致 sizeof 为 32 的字符串结构中的开销是多少 Most modern std string implementations1 save very small strings directly on the stack in a