Я недавно добавил статический массив поиска в один из моих классов, например:
// MyClass.h
class MyClass
{
static MyClass const s_fromIndex[1500];
public:
MyClass(size_t arg1, size_t arg2);
static MyClass fromIndex(size_t index) { return s_fromIndex[index]; }
}
// MyClass.cpp
MyClass const MyClass::s_fromIndex[1500] =
{
MyClass(0, 1), MyClass(0, 2), MyClass(0, 3), MyClass(0, 4),
...
};
Причиной использования массива является то, что вычисление от индекса до двух параметров довольно дорого (несмотря на то, что это выглядит в примере кода). Поскольку индекс ограничен 1500, я решил вместо этого вернуть объекты из массива поиска.
Класс находится в проекте статической библиотеки. Вскоре я заметил, что всякий раз, когда я использовал MyClass в своем исполняемом проекте, этап «генерации кода» во время сборки внезапно занимал очень много времени (2-3 минуты). Ранее этот шаг выполнялся практически мгновенно. Отладочная сборка по-прежнему завершается очень быстро.
Когда я вынимаю статический массив, все снова строится гладко.
Как ни странно, я не могу воспроизвести проблему в новом чистом проекте только с приведенным выше кодом, поэтому могут происходить некоторые другие вещи.
Есть ли у вас идеи, почему статический массив вызывает чрезвычайно длинный шаг «генерации кода» в сборке релиза? Что компилятор / компоновщик делает на этом шаге?
Редактировать: В настоящее время я обошел проблему, используя статический вектор и заполняя его во время выполнения. Мне все еще интересно, что может вызвать чрезвычайно длинный шаг генерации кода. Кроме того, я хотел бы добавить, что в действительности MyClass больше, чем пример кода, который я опубликовал. В частности, у него есть один (и только один) закрытый член. Тип этого члена является шаблонным классом. Может быть, это как-то связано с этим.