Я работаю над статической библиотекой, которая связана в несколько бинарных файлов.Моя цель - уменьшить объем памяти моей библиотеки, когда она становится связанной.
Пользователям моей библиотеки требуются определенные глобальные объекты, которые я создаю в файле cpp в моей библиотеке, а затем экспортируем файл заголовка, который имеетextern объявлений этих переменных.
Проблема в том, что в зависимости от того, как библиотека используется, некоторые из этих глобальных переменных могут вообще не использоваться.
В следующем коде показана структура моего кодав некоторой степени:
Foo.hpp:
class Foo
{
static int sFooListIndex = 0;
static Foo * sFooList[10] = { nullptr };
public:
Foo()
{
if(sFooListIndex < 10)
{
sFooList[sFooListIndex++] = this;
}
}
}
Bar1.hpp:
#include "Foo.hpp"
class Bar1 : public Foo
{
public:
Bar1() : Foo() { }
}
Bar2.hpp:
#include "Foo.hpp"
class Bar2 : public Foo
{
public:
Bar2() : Foo() { }
}
Globals.cpp:
#include "Bar1.hpp”
#include "Bar2.hpp"
static Bar1 bar1;
Foo & foo1 = bar1;
static Bar2 bar2;
Foo & foo2 = bar2;
Export.hpp:
#include "Foo.hpp"
extern Foo & foo1;
extern Foo & foo2;
Вот мои вопросы:
Если проект, включающий мою библиотеку, использует только foo1,тогда foo2 будет удален из окончательного двоичного файла?И, таким образом, код для класса Bar2 также будет удален?
Если нет, знаете ли вы, как я могу реструктурировать свой код так, чтобы неиспользуемые символы и неиспользуемый код были удаленыво время ссылки?Я могу думать только о том, чтобы переместить Globals.cpp и Export.hpp в проект, включающий мою библиотеку.Есть ли другой способ?
Один из способов, который я могу придумать, - это переместить разбиение Globals.hpp и Export.hpp на более мелкие файлы с группами объявлений и определений, которые имеют смысл вместе.Это поможет?