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