Компиляция большой иерархии классов потребляет много памяти после добавления boost :: serialization - PullRequest
2 голосов
/ 08 сентября 2010

Нам требовалась сериализация довольно большой иерархии классов C ++ с большим количеством наследования, сжатия, общих указателей и т. Д. Я решил использовать библиотеку boost::serialization.

Моя проблема в том, что при компиляции этой библиотеки на VS 2008 cl занимает более 1 ГБ оперативной памяти. Я полагаю, это вызвано сериализацией на основе шаблонов в Boost. Это вызывает много проблем при создании целого проекта на более слабых ПК. Что интересно, время компиляции не намного больше:

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

Мой вопрос: можно ли сократить использование памяти? Может быть, с более длительным временем компиляции?

Редактировать

Это увеличение используемой памяти происходит в нескольких файлах во время компиляции проекта C ++ / CLI, который фактически использует сериализацию из библиотеки выше. Без сериализации cl.exe имеет максимальный объем памяти для самого большого файла около 150 МБ, обычно не более 80. Увеличение использования памяти для некоторых файлов составляет от 4 до 8 раз.

1 Ответ

1 голос
/ 11 сентября 2010

Я столкнулся с той же проблемой при использовании boost :: serialization. Вероятно, единственный обходной путь - разделить огромный класс на более инкапсулированные части. Для некоторых классов в моем коде я также написал слой между классами приложения и сериализатором. Этот слой упростил структуру данных, которые будут сохранены. Он даже отделил большую часть «данных» и сохранил ее, используя libz (zip-библиотеку) вместо повсеместного использования сериализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...