在添加boost :: serialization之后,大类层次结构的编译会消耗大量内存

时间:2010-09-08 12:23:12

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

我们需要序列化相当大的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倍。

1 个答案:

答案 0 :(得分:1)

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