c++ - 使用 C++ 将整数 vector 写入二进制文件的更快方法?

标签 c++ binaryfiles stdvector

我目前有以下写法vector<int>对象到二进制文件。

void save_config(std::string fname, std::vector<int> config) {
    std::ofstream out(fname);
    for (auto&& item : config)
        out << item;
}

但是,我需要保存的数据约为 60 MB,使用此函数写入大约需要 5 秒。此外,我必须为正在运行的算法的每次迭代编写一个二进制文件,而生成这个数量级数据的输入大小的单次迭代可能大约需要 500 毫秒。

我可以将写入时间隐藏在算法的执行时间之后,但是,由于运行时的差异,这并不重要。有什么办法可以改善我的save_config功能?另外,我使用二进制文件是因为我已经准备好它是写入速度最快的格式;但具体格式并不重要,所以如果有人有替代建议,我会很高兴听到。

最佳答案

是否会导致操作速度明显加快还需要进行测试,但 write() function 的以下使用避免迭代 vector :

#include <fstream>
#include <vector>

void save_config(std::string fname, std::vector<int> config)
{
    std::ofstream out(fname, std::ios_base::binary);
    uint64_t size = config.size();
    out.write(reinterpret_cast<char*>(&size), sizeof(size));
    out.write(reinterpret_cast<char*>(config.data()), size * sizeof(int));
}

请注意,我还添加了一个“前缀”来记录 vector 的大小,以便稍后从文件中读取数据时可以确定;我为此使用了固定大小类型(64 位),以避免具有 32 位 size_t 类型的平台可能出现的问题(您也许应该考虑使用固定大小整数类型,例如如 int32_t,以避免类似问题)。

关于c++ - 使用 C++ 将整数 vector 写入二进制文件的更快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67039971/

相关文章:

c++ - 在std::set中排序的唯一指针

C++ 读取文件 : if condition with . fail() 或 try/catch

C++ 二进制文件读取

c - 用 C 读取二进制文件,然后将文件中的数据与我读入的数据进行匹配

c++ - '消息框A' : cannot convert parameter 2 from 'std::vector<_Ty>' to 'LPCSTR'

c++ - emplace_back 调用移动构造函数和析构函数

c++ - 将 C++ 类转换为 C 结构(以及更多)

c++ - 有没有办法找出 C 函数的主要调用者?

c++ - 嵌套 map 结构创建空 map

c - 文本文件到排序的二进制文件,C 语言