【发布时间】:2011-08-11 15:38:43
【问题描述】:
我正在尝试更多地了解 C++ 字符串。
考虑
const char* cstring = "hello";
std::string string(cstring);
和
std::string string("hello");
我是否正确假设两者都在应用程序的 .data 部分存储“hello”,然后将字节复制到堆上的另一个区域,由 std::string 管理的指针可以访问它们?
我怎样才能有效地存储一个非常长的字符串?我有点想从套接字流中读取数据的应用程序。我害怕连接很多次。我可以想象使用一个链表并遍历这个链表。
字符串已经吓到我太久了!
任何链接、提示、解释、更多细节都会非常有帮助。
【问题讨论】:
-
真正的长是多少? 10MB? 20也许?还是您的意思是 10 GB 之类的东西?如今,计算机拥有千兆字节的 RAM。
-
我想的更像是 10-100 MB。不过,这本来是一个开放式问题,所以请随意解释 =)。我很确定由于操作系统内存管理,您无法分配 10GB 的连续内存。我认为这样的大小需要一个列表。
-
@kispit - 在我的 64 位机器上,我可以分配内存,直到交换文件填满硬盘。几十GB没问题!
-
@kisplit - 此外,您假设“Hello”将存储在堆上对于许多实现来说是不正确的。小字符串存储在字符串对象中。见这里http://stackoverflow.com/questions/3770781/why-is-sizeofstring-32。
-
@kisplit - 关于虚拟内存,我的观点是,分配大块内存仅在 32 位系统上存在问题,而不是在拥有数 TB 连续虚拟内存的 64 位地址空间上。
标签: c++ string performance construction