Я работаю над университетским исследовательским проектом на C++ с много шаблонов, у которых есть дополнительные вложенные шаблоны и так далее. Проект касается эффективных структур данных индекса для конкретной области исследований. Вы можете себе представить: структура индекса имеет множество параметров для настройки, поэтому мы используем параметры шаблона чрезмерно. Конечно, мы хотим протестировать наши индексы с разными наборами параметров, поэтому существует множество экземпляров шаблонов.Как сделать ссылку на C++ меньше памяти
Проект не такой огромный. Возможно 50k LOC. Но все же, связь занимает 50 секунд и потребляет более 7 ГБ памяти (!!!). Я на 32-Гбайт рабочей станции, поэтому все в порядке для меня. У меня часто есть бакалавр и магистранты, работающие над этим проектом. Проблема в том, что они часто работают на ноутбуках с 4 или 8 ГБ оперативной памяти. Таким образом, у этих студентов большие проблемы, связанные с этим проектом. Получающаяся тестовая двоичная (т. Е. Двоичная, которая просто содержит единичные тесты для структур индекса) составляет 700 мегабайт. Большинство из них являются символами, потому что вложенные шаблоны создают огромные имена. Если я использую strip
в двоичном формате, он падает до 8 мегабайт.
Так есть способ уменьшить использование ОЗУ во время связи? И есть ли способ иметь меньшие символы даже с вложенными шаблонами?
Скомпилировать, используя g ++ 4.9 с std=c++11
под Ubuntu 14.10.
Edit:
Это действительно кажется, вложенные шаблоны. У нас есть два тестовых примера с действительно глубоко вложенными шаблонами. Два файла .o
для этих тестов составляют почти 90% памяти окончательного двоичного файла. Они приводят к именам методов, длина которых превышает 3000 символов. Здесь нет способа не использовать вложенные шаблоны, поскольку они образуют «дерево обработки» примерного запроса. Есть ли способ сохранить короткие имена при использовании глубоко вложенных шаблонов?
Что OS, компилятор версия? – EdChum
@EdChum: g ++ 4.9 под Ubuntu 14.10. Добавил его к вопросу сейчас. – gexicide
Какая версия на C++? C++ 11 имеет внешние шаблоны! –