当前位置: 首页 > article >正文

c++中string底层实现之SSO

c++中string底层实现之SSO

string的构造函数

参考资料

Simple String Optimization,最小字符串优化,基本原理是:当分配的字节数小于16字节的时候,直接从栈上进行进行内存分配,如果大于16字节,则在堆上进行内存分配。

验证一下:

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
void *operator new(size_t n){
    cout<<"new size="<<n;
    return malloc(n);
}
void operator delete(void* p){
    free(p);
}
int main(){
    for(int i=0; i<30; i++){
        cout<<"i="<<i<<": "<<string(i, '=')<<endl;
    }
    return 0;

}

这里对new进行了重载,以便我们观察是否调用的new。

root@***********************:~# g++ -o test test.cpp 
root@***********************:~# ./test
i=0: 
i=1: =
i=2: ==
i=3: ===
i=4: ====
i=5: =====
i=6: ======
i=7: =======
i=8: ========
i=9: =========
i=10: ==========
i=11: ===========
i=12: ============
i=13: =============
i=14: ==============
i=15: ===============
i=16: new size=17================
i=17: new size=18=================
i=18: new size=19==================
i=19: new size=20===================
i=20: new size=21====================
i=21: new size=22=====================
i=22: new size=23======================
i=23: new size=24=======================
i=24: new size=25========================
i=25: new size=26=========================
i=26: new size=27==========================
i=27: new size=28===========================
i=28: new size=29============================
i=29: new size=30=============================

这就说明当字符串长度小于16时,是在栈上面分配内存,大于16的时候,在堆上分配内存,也就是调用了new方法。


http://www.kler.cn/a/379952.html

相关文章:

  • ZDH权限-扩展支持数据权限
  • 1范数和无穷范数定义、对偶关系、1范数和无穷范数是凸函数的详细证明过程
  • 影刀RPA实战:嵌入python,如虎添翼
  • HarmonyOS 移动应用开发
  • 二、应用层,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》
  • kd树的原理简述
  • DMFLDR数据载入使用实践
  • 【Git】Git 远程仓库命令详解
  • three.js 实现 css2d css3d效果 将 二维Dom 和 三维场景结合
  • Oracle 第18章:分区技术
  • 代理IP地址和端口是什么?怎么进行设置?
  • 嵌入式开发之文件I/O-函数
  • 在区块链技术中,什么是权益证明(PoS)?
  • 从 TCP 友好性看传输优化
  • 快速入门CSS
  • flutter dart mixin 姿势
  • 【VS+QT】联合开发踩坑记录
  • 【毫米波雷达(七)】自动驾驶汽车中的精准定位——RTK定位技术
  • 【视频】OpenCV:识别颜色、绘制轮廓
  • Docker 部署RocketMQ
  • SOLIDWORKS 2025加快装配体设计 确保可制造性
  • 【解决】Ubuntu18.04 卸载python之后桌面异常且终端无法打开,重启后进入tty1,没有图形化界面
  • Python 使用 OpenCV 进行全景拼接
  • C#:强大而优雅的编程语言
  • 【C++ 曼哈顿距离 数学】1131. 绝对值表达式的最大值|2059
  • [论文阅读]LOGAN: Membership Inference Attacks Against Generative Models