學習 LLVM(12) SmallString

位於 llvm/include/llvm/[[ADT]]/[[SmallString.h]]html

參見:http://llvm.org/docs/ProgrammersManual.html#dss_smallstring安全

註釋:'Normally small' strings -- 普通的小的字符串app

這個頭文件定義了類 SmallString。函數

SmallString 是 [[SmallVector]] 的子類,添加了一個方便的 API 來對字符串進行操做,如使用 [[StringRef]] 參數的 += 重載。SmallString 儘可能使用預先分配的空間來存放字符串數據,這樣避免了沒必要要的內存分配,在須要的時候才從堆中分配內存。由於 SmallString 本身擁有字符串數據,所以能夠安全地使用它進行各類操做和變化。this

相似於 [[SmallVector]], SmallString 的大的缺陷是它的 sizeof()。通常放在堆棧(stack)中比較好,極少放在堆(heap)中,也極少用做某個堆中分配的對象的成員或當作返回值。code

 
== 類 SmallString 概要 ==orm

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]] 作爲參數或返回值。
htm

相關文章
相關標籤/搜索