FBString 的最大容量?

Max capacity for FBString?

对于 FBStringmax_size() 只需 returns std::numeric_limits::max()。而struct MediumLargecapacity_的高两位用来表示FBString(small/medium/large)的类型,即capacity_ 的最大值将为 2^62-1(64 位处理器),它小于 size_t 的最大值。是我误解了实现还是这实际上是一个错误?

  struct MediumLarge {
    Char* data_;
    size_t size_;
    size_t capacity_;

    size_t capacity() const {
      return kIsLittleEndian ? capacity_ & capacityExtractMask : capacity_ >> 2;
    }

    void setCapacity(size_t cap, Category cat) {
      capacity_ = kIsLittleEndian
          ? cap | (static_cast<size_t>(cat) << kCategoryShift)
          : (cap << 2) | static_cast<size_t>(cat);
    }
  };

因为 folly::FBStringdocumentation 声称是:

100% compatible with std::string

它实际上似乎是一个错误(在我看来)。

顺便说一句,对于 large 字符串,FBString 应用 copy-on-write (COW),这也打破了与 std::string (C++11 起).

的兼容性

有关详细信息,请参阅 Legality of COW std::string implementation in C++11

我猜他们根本不关心不切实际长度的字符串(现在)。由于 COW 导致的不兼容可能会严重得多。