【问题标题】:Compilation of large class hierarchy consumes lots of memory after adding boost::serialization添加 boost::serialization 后编译大型类层次结构会消耗大量内存
【发布时间】:2011-04-09 17:17:49
【问题描述】:

我们需要对具有大量继承、收缩、共享指针等的相当大的 C++ 类层次结构进行序列化。我决定使用 boost::serialization 库。

我的问题是,虽然在 VS 2008 cl 上编译这个库会占用 1 GB 的 RAM 内存。我想这是由Boost中基于模板的序列化引起的。这会导致在较弱的 PC 上构建整个项目时出现许多问题。有趣的是,编译时间并没有那么长:

no serialization: 15:38 [mm:ss]
serialization:    17:06 [mm:ss]

我的问题是:是否可以减少内存使用?也许编译时间更长?

编辑

在编译 C++/CLI 项目期间,使用内存的增加发生在多个文件中,实际上使用了来自上述库的序列化。没有序列化cl.exe在最大文件上的内存峰值约为150 MB,通常不超过80。几个文件的内存使用增加约4到8倍。

【问题讨论】:

  • 你应该包括你的 cl 在没有序列化库的情况下需要多少内存。
  • 由于在构建过程中为 每个 cpp 文件启动了一个 cl.exe,因此您应该检查哪个 cpp 文件使用的内存最多。

标签: c++ visual-studio-2008 templates serialization boost


【解决方案1】:

我在使用 boost::serialization 时遇到了同样的问题。可能唯一的解决方法是将庞大的类拆分为更多封装的部分。对于我代码中的某些类,我还在我的应用程序类和序列化程序之间编写了一个层。该层简化了要保存的数据的结构。它甚至分离了一个更大的“数据”部分,并使用 libz(zip 库)而不是到处使用序列化来保存它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 2011-06-01
    • 2022-01-16
    • 2014-01-04
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多