【问题标题】:Write binary file chunk写入二进制文件块
【发布时间】:2015-02-22 17:10:01
【问题描述】:

我有 6GB 的可用物理内存。我正在处理一个大数据,大小约为 4GB。我刚刚意识到我无法以这种方式保存它,我曾经使用较小的数据(~1GB)来保存它:

void save(char f_name[], int size, float data[])
{
    std::fstream f_bin(f_name, std::ios::out|std::ios::binary);

    f_bin.seekg(std::ios::beg);
    f_bin.write((char*)data, size*sizeof(float));
    f_bin.close();
}

因为它将数据存储在内存中,并且需要相同数量的 RAM 才能将其写入 HD。有没有办法将 4GB 写入(例如 1GB)块中,所以它永远不会超过 6GB 的限制?

【问题讨论】:

  • 我想知道是否需要相同数量的 RAM 是特定于平台的。
  • 首先,我假设您使用的是 64 位平台?其次,物理 RAM 并不重要,因为操作系统会在需要时使用 HDD 来获取额外的虚拟内存。您使用的是什么操作系统?
  • 我在 Cygwin_4.x-Windows 64bit 上
  • 根据您生成数据的方式,内存映射文件可能适合您。
  • 数据是一个扁平化的浮点数组

标签: c++ binaryfiles


【解决方案1】:

有什么影响

void save(char f_name[], int size, float data[])
{
    std::fstream f_bin(f_name, std::ios::out|std::ios::binary);

    f_bin.seekp(std::ios::beg);

    while (size > 0)
    {
        int amount  = std::min(1000, size);
        f_bin.write((char*)data, amount * sizeof(float));

        data += amount;
        size -= amount;
    }

    f_bin.close();
}

【讨论】:

    猜你喜欢
    • 2017-06-30
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多