限制c ++中的字符串大小?

aks*_*aks 13 c++

我有一百万条记录,每个大约30个字符通过套接字进入.我可以把它全部读成一个字符串吗?我可以分配的字符串大小是否有限制?

如果是这样,我是否可以通过记录在套接字记录上发送数据并按记录接收记录.直到运行时我才知道每条记录的大小.

Gou*_*ham 23

回答第一个问题:C++字符串的最大大小由string :: max_size给出

  • 虽然您可能想要提及的是,在大多数实现中,此最大大小基本上构成了进程可用的所有内存. (4认同)

ust*_*sta 10

std::string::max_size()将告诉你程序运行的架构所施加的理论限制.除此之外,只要您有足够的RAM和/或磁盘交换空间,您就可以拥有std::strings巨大的空间.你的第二个问题的答案是肯定的,你可以按记录发送记录,而且你可能无法同时通过套接字发送大块数据 - 单个发送操作的大小有限制.直到运行时不知道单个字符串的大小是不是一个问题,在编译时不需要知道它是否通过套接字发送它们.如何按记录实际发送这些字符串取决于您正在使用的套接字/网络库; 请参阅相关文档.


Dan*_*nas 6

字符串的大小没有官方限制。该软件将要求您的系统提供内存,只要它得到它,它就能够向您的字符串添加字符。

你的问题的其余部分不清楚。


Oli*_*ock 5

C++ 中字符串大小的唯一实际限制是您的可用内存。话虽如此,随着您不断接收数据(假设您事先不知道其总大小),将您的字符串重新分配到正确的大小将是昂贵的。通常,您会将数据块读取到固定大小的缓冲区中,并在获得时将其解码为自然形状(您的记录)。


BeW*_*ned 5

字符串的大小仅受程序可用内存量的限制,与其说是 C++ 限制,不如说是操作系统限制。C++/C 字符串以空值终止,因此字符串例程将很乐意处理极长的字符串,直到它们找到空值为止。

在 Win32 上,可用于数据的最大内存量通常约为 2 Gigs。

您可以从套接字读取任意大量的数据,但是您必须有某种方法来分隔您正在读取的数据。必须有与您正在阅读的记录相关联的记录结束标记或长度,以便使用它来解析记录。您真的要将数据读入字符串吗?如果您没有足够的可用内存来将数据保存在 RAM 中,会发生什么?我怀疑有一种更有效的方法来处理这些数据,但我对这个问题的了解还不够。