CString 内存管理解析

在程序开发中, 字符串是我们经常使用的一个东西 . C 语言中 , 我们经常使用 char* 来操作字符串 .char* 虽然在使用上比较直观 , 但在内存管理上面却不怎么方便 . 手动开辟和释放内存也是一项比较麻烦的操作 . 而且还有考虑内存泄漏 , 和内存越界的一系列容易出问题的地方 . 而且字符串操作需要频繁地对内存进行 new delete ,次数多了也会造成内存碎片过多而影响程序的性能 . 因此 , 在所有的比较出名的 C++ 基础类库中都有封装的 string . 比如 stl,qt,mfc 这些库里面都有 string 类的封装. 本文的主旨就是剖析 mfc CString 的内存管理以及它内部所使用的一些优化策略. 本文剖析的源代码是 vc6.0 中的 CString .其他版本的会不同 .

首先介绍 cstring 内部的一个数据结构 CStringData .

struct CStringData

{

long nRefs;             //引用计数

int nDataLength;        //实际数据 ( 字符串 ) 长度 

int nAllocLength;       //实际开辟的内存长度

// TCHAR data[nAllocLength]

 

TCHAR* data()           //实际字符串首地址 .

{ return (TCHAR*)(this+1); }

};

这是 string 用于存放字符串和内存信息的一个数据结构. 我们经常使用的 getbuffer 方法就是调用这个数据结构的 data 方法.

内存的开辟

cstring

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值