我有一百万条记录,每个大约30个字符通过套接字进入.我可以把它全部读成一个字符串吗?我可以分配的字符串大小是否有限制?
如果是这样,我是否可以通过记录在套接字记录上发送数据并按记录接收记录.直到运行时我才知道每条记录的大小.
Gou*_*ham 23
回答第一个问题:C++字符串的最大大小由string :: max_size给出
ust*_*sta 10
std::string::max_size()将告诉你程序运行的架构所施加的理论限制.除此之外,只要您有足够的RAM和/或磁盘交换空间,您就可以拥有std::strings巨大的空间.你的第二个问题的答案是肯定的,你可以按记录发送记录,而且你可能无法同时通过套接字发送大块数据 - 单个发送操作的大小有限制.直到运行时不知道单个字符串的大小是不是一个问题,在编译时不需要知道它是否通过套接字发送它们.如何按记录实际发送这些字符串取决于您正在使用的套接字/网络库; 请参阅相关文档.
C++ 中字符串大小的唯一实际限制是您的可用内存。话虽如此,随着您不断接收数据(假设您事先不知道其总大小),将您的字符串重新分配到正确的大小将是昂贵的。通常,您会将数据块读取到固定大小的缓冲区中,并在获得时将其解码为自然形状(您的记录)。
字符串的大小仅受程序可用内存量的限制,与其说是 C++ 限制,不如说是操作系统限制。C++/C 字符串以空值终止,因此字符串例程将很乐意处理极长的字符串,直到它们找到空值为止。
在 Win32 上,可用于数据的最大内存量通常约为 2 Gigs。
您可以从套接字读取任意大量的数据,但是您必须有某种方法来分隔您正在读取的数据。必须有与您正在阅读的记录相关联的记录结束标记或长度,以便使用它来解析记录。您真的要将数据读入字符串吗?如果您没有足够的可用内存来将数据保存在 RAM 中,会发生什么?我怀疑有一种更有效的方法来处理这些数据,但我对这个问题的了解还不够。
| 归档时间: |
|
| 查看次数: |
47832 次 |
| 最近记录: |