gpt4 book ai didi

c++ - C++ 字符串是如何存储的?

转载 作者:IT王子 更新时间:2023-10-28 23:33:49 29 4
gpt4 key购买 nike

Possible Duplicate:
std::string and its automatic memory resizing

我只是好奇,字符串是如何存储在内存中的?例如,当我这样做时:

string testString = "asd";

它分配了 4 个字节,对吗? a + s + d +\0

但后来,当我想为这个字符串分配一些新文本时,它可以工作,但我不明白如何。例如我这样做:

testString = "123456789"

现在它应该是 10 个字节长。但是如果这样的字符串没有空间怎么办?假设从字符串开头的第 5+6 个字节被其他 2 个字符占用。 CPU如何处理它?它在内存中找到适合该字符串的全新位置?

最佳答案

这取决于实现,但一般的想法是字符串类将包含一个指向存储字符串实际内容的内存区域的指针。两种常见的实现是存储 3 个指针(分配区域和数据的开始、数据结束、分配区域的结束)或一个指针(分配区域和数据的开始)和两个整数(字符串中的字符数和分配的数量字节)。

当新数据附加到字符串时,如果它适合分配的区域,它将被写入并且数据指针的大小/结尾将相应地更新。如果数据不适合该区域,则会创建一个新缓冲区并复制数据。

还请注意,许多实现都对小字符串进行了优化,其中字符串类确实包含一个小缓冲区。如果字符串的内容适合缓冲区,则不会动态分配内存,只使用本地缓冲区。

关于c++ - C++ 字符串是如何存储的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9132502/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com