学习 LLVM(12) SmallString

位于 llvm/include/llvm/[[ADT]]/[[SmallString.h]]

参见:http://llvm.org/docs/ProgrammersManual.html#dss_smallstring

注释:'Normally small' strings -- 普通的小的字符串

这个头文件定义了类 SmallString。

SmallString 是 [[SmallVector]] 的子类,添加了一个方便的 API 来对字符串进行操作,如使用 [[StringRef]] 参数的 += 重载。SmallString 尽量使用预先分配的空间来存放字符串数据,这样避免了不必要的内存分配,在需要的时候才从堆中分配内存。因为 SmallString 自己拥有字符串数据,因此可以安全地使用它进行各种操作和变化。

类似于 [[SmallVector]], SmallString 的大的缺陷是它的 sizeof()。一般放在堆栈(stack)中比较好,极少放在堆(heap)中,也极少用作某个堆中分配的对象的成员或当做返回值。

 
== 类 SmallString 概要 ==

template<unsigned InternalLen> class SmallString 
  : public SmallVector<char, InternalLen> {  // 使用 SmallVector 做底层存储
  // 从 SmallVector, SmallVectorBase 等基类获得数据成员。参见 SmallVector
  char *BeginX, *EndX, *CapacityX;
  char in_place_buffer[InternalLen];   // 在类中的字符串缓冲,用于说明,实际是 union U 类型的,大小也不是。

  // SmallString 自己的。
  this()  // 多种形式的构造
  assign(), append(), compare(), startswith(), endswith(), find()
  substr(), slice(), +=() 等众多的字符串操作函数。
}

 这个类多处使用 [[StringRef]] 做为参数或返回值。

转载于:https://my.oschina.net/u/232554/blog/42214

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值