【问题标题】:How much data can a vector<string> hold? [duplicate]一个vector<string>可以容纳多少数据? [复制]
【发布时间】:2016-01-11 16:05:14
【问题描述】:

我有一个程序,它通过从两个单独的 .csv 文件中获取数据来生成一个 .csv 文件。

我使用vector&lt;string&gt; 来保存每个 csv 文件中的数据,然后我的程序根据特定条件进行数据排序,从而生成输出。我担心我的程序可能内存不足。

vector&lt;string&gt; 一次可以保存多少数据?它是系统/处理器/操作系统特定的吗??

【问题讨论】:

  • 也许你可以看看this out
  • .csv 文件有多大??
  • csv 文件可能有 1000 多个输入
  • vector 或与此相关的任何其他容器......它将保存操作系统允许的尽可能多的数据,除非矢量本身具有自我施加的限制......只需处理矢量抛出的任何异常

标签: c++ csv memory vector


【解决方案1】:

您可以使用非常大的数字vector&lt;T&gt;::max_size() 检查它,从here 您可以在运行此示例的系统上读取它的 1073741823。但我想你对现实世界的场景更感兴趣 - 当你的进程堆上没有可用的连续内存块时,你会得到 bad_alloc 异常。一种解决方案可能是使用std::deque - 它会分块进行分配。

【讨论】:

  • vector::max_size() 不太可能有用。它可能会接近 SIZE_MAX/sizeof(T),但它不考虑字符串中实际的数据,也不考虑其他内存使用情况。关于 max_size,你只能说,你不能让向量更大
【解决方案2】:

是的,它是系统/处理器/操作系统特定的。

对于 32 位程序,它可能被限制为 2GB(如果您有任何其他数据,它会更少)。 64 位程序可能会受到可用交换空间(数 GB)的限制。

嵌入式系统将提供更少(可能非常少)。

不过,几 10 或 100 的 MB 应该没问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-15
    • 2012-12-10
    • 2013-02-28
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多