You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么C++中sizeof(string)无论字符串内容如何始终返回24?

问题原因分析
  • sizeof 是C++编译期运算符,计算的是类型本身在栈空间中占用的固定内存大小,和对象管理的动态堆内存无关。std::string 是封装了字符串存储逻辑的容器类,本身是一个栈上的固定大小对象,实际存储的字符串内容要么存在对象内置的小缓冲区,要么存在单独申请的堆内存中,这部分存储内容的内存不会被计入 sizeof 的运算结果。
  • 你观测到的24字节固定结果,是64位系统下GNU libstdc++(目前最常用的C++标准库实现)的 std::string 布局的默认大小:它采用小字符串优化(SSO)设计,内部总大小为3个指针的长度,64位系统下单个指针占8字节,总大小就是 3*8=24 字节。

    这24字节空间会被动态复用:当存储的字符串长度≤15字节时,内容直接存放在这24字节的内置缓冲区内,无需申请堆内存;当字符串长度超过阈值时,这部分空间会切换为「堆内存指针+字符串长度+容量」三个字段,指向外部动态申请的内存存储字符串内容。

  • 如果要获取字符串实际包含的字符数,应该调用 s.size() 成员方法,不要使用 sizeof 运算符。

内容的提问来源于stack exchange,提问作者Chirag Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:33:00