【问题标题】:How to read and write large std::vector<std::vector<float>> to file in C++如何在 C++ 中读取和写入大型 std::vector<std::vector<float>> 到文件
【发布时间】:2021-10-22 15:18:11
【问题描述】:

在我的程序的构造函数中,我使用嵌套的std::vector&lt;std::vector&lt;float&gt;&gt; 生成了一个非常大的 2048 * 2048 个浮点数查找表。

查找表每次总是相同的,所以我想将此表写入文件以节省重新计算。

实现这一目标的最佳方法是什么?将值写入大标题是否最好,还是保存对象的二进制副本更明智?

提前致谢!

编辑:

如果有任何影响,也许它与分配内存所花费的时间有关,这是通过以下模式完成的:

dataStructure.resize(numberOfRows);
for (int i = 0; i < numberOfRows; i++)
     dataStructure[i].resize(numberOfColumns);
    

其中数据结构是std::vector&lt;std::vector&lt;float&gt;&gt;

【问题讨论】:

  • 生成需要多长时间?从磁盘加载它更快吗?
  • 那么 16MB 的数据?这一点都不大,但我不会把它放到源代码中。
  • 我不知道将它写入磁盘和从磁盘写入的最佳方式。这真的是我问题的主旨。也许这是分配内存的方式。它的分配方式如下:(请参阅有问题的编辑)。
  • 有没有机会让编译器使用 constexpr 执行计算?或者离线执行计算并使用计算值初始化一个 constexpr。
  • “最佳”是主观的。最快的 I/O?最易读的代码?开发最少的努力?如果您将来需要彻底改变它,最灵活?如果对您的情况没有任何其他了解,我会说只是做一些有效且可以理解的事情。很有可能它足以满足您的需要。如果您担心性能等问题,请进行相应的测试。

标签: c++ lookup-tables


【解决方案1】:

在这种情况下,答案是优化查找表的生成。我做的工作比需要的多得多,现在加载时间几乎是即时的。

对于那些在未来查看此线程并遇到类似问题的人,评论中有很好的一般性建议。

感谢所有贡献者的关注!

【讨论】:

  • 也许您应该考虑在您的回答中总结“cmets 中的一般建议”,然后可能将您的回答设为Community WIki
猜你喜欢
  • 2012-09-04
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多