如何为静态字符串优化Copy-on-Write String类的存储?
问题:区分静态字符串与栈上字符数组以实现COW String类的静态数据优化
在C/C++中,字符串字面量会被存放在具有整个程序生命周期的只读静态存储区。比如下面的代码会输出该只读内存区域的指针:
void foo(const char* string) { std::cout << static_cast<void const*>(string) << std::endl; } int main() { foo("Hello World"); }
我想实现一个带静态数据优化的Copy-on-Write(写时拷贝)String类:不需要把整个字符串拷贝到动态分配的内存(这个操作开销很高),而是直接保留指向静态数据的指针,只有在需要写入的时候再执行拷贝操作。
但这里有个核心问题:如何区分静态字符串(比如上面的字面量)和像下面示例中位于栈上、生命周期非静态的字符数组?
int main() { char myString[] = "Hello World"; foo(myString); }
我一开始考虑给std::string_view写特殊构造函数,但不确定std::string_view是否能代表所指向的字符串具有静态生命周期。
内容的提问来源于stack exchange,提问作者Patrick Wright
相关产品推荐
相关产品推荐

