C++代码中的string固定大小

一、内存分配:

  • 编译器会为每一个 string 对象分配 24 个字节的栈空间;
  • 如果要存储的字符串长度(strlen 而非 sizeof)小于等于 22,则直接存储在函数栈中;最后一个字节(地址最高处)存储字符串的实际长度;
  • 如果要存储的字符串长度超过 22,会另外分配堆内存空间存储字符串本身,栈内的 24 个字节空间另有他用:
    • 将字符串在堆中的地址存储在 24 个字节的前 8 个字节;
    • 中间 8 个字节存储字符串的长度;
    • 最后 8 个字节:地址最高的字节固定为 0x80,剩余字节存储分配的堆空间大小。

二、计算大小:

#include <iostream>
#include <string>

int main() 
{
    std::string str = "Hello, World!"; // 创建一个包含字符数据的std::string对象
    std::cout << "Size of string object: " << sizeof(str) << std::endl; // 输出std::string对象的大小:40
    std::cout << "Size of string : " << sizeof(std::string) << std::endl; // 输出std::string的大小:40
    std::cout << "Length of string: " << str.length() << std::endl; // 输出字符串的实际长度 : 13
    return 0;
}

        注意事项:​sizeof(std::string)和 sizeof(str) ​表示 ​std::string​对象本身的大小,而不是存储的字符串数据的大小,str.length()才能表示本身字符串的长度;

三、 规定大小:

std::string str ;
str.reserve(100);

在结构体中:

struct Struct
{
    std::string a;
}
Struct myStruct;
myStruct.reserve(100);

使用场景:

       在进行不同语言之间传输时,需要确定每个变量的内存大小,所以string变量尽量使用char []来替换;

注意事项:string类型的变量必须实例化之后才能规定大小,不能声明类型的大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐凡星

你的鼓励将是我的动力;

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值