哈喽,各位好!今天咱们来聊聊C++里两个“零拷贝”的家伙:std::string_view和std::span。 别看它们名字挺唬人,其实用起来相当简单,而且在性能优化方面能帮上大忙。 开场白:拷贝的代价 在深入这两个“零拷贝”神器之前,咱们先得明白拷贝操作有多费劲。 想象一下,你要把一份500页的报告复印给办公室里的每个人。 如果你用传统的方法,那就是一份一份地复印,累死个人不说,还浪费纸张和时间。 这就是传统的拷贝,数据量越大,代价越高。 在C++里,当我们把一个std::string或者std::vector赋值给另一个变量时,默认情况下,编译器会创建一个新的对象,并将原始对象的内容完整地复制到新对象中。 这意味着要分配新的内存,然后把数据从一个地方搬到另一个地方。 对于大型字符串或者容器,这个过程可能会很耗时,占用大量的内存。 std::string_view: 字符串的“只读窗口” std::string_view(C++17引入)就像一个字符串的“只读窗口”。 它不拥有字符串的数据,只是引用现有的字符串。这意味着,当你创建一个string_view时,不会发生任何内存分配或 …
继续阅读“C++ `std::string_view` (C++17) 与 `std::span` (C++20) 的零拷贝特性”