История изменений
Исправление annulen, (текущая версия) :
Когда шаблон инстанцируется с разными параметрами, то для каждого набора параметров генерируется свой набор символов (т.е. каждый метод, v-таблица и т.п. имеют отдельный символ для каждого варианта параметров шаблона). Линкер про С++ ни сном, ни духом не ведает и считает, что это все разные сишные функции/переменные. В результате таблица символов может стать сильно больше, чем для нешаблонного кода, и это существенно замедляет линковку (кстати, этот эффект послужил мотивацией для создания ld.gold). Чтобы уменьшить масштаб проблемы С++ код рекомендуется собирать с -fvisiblity=hidden -fvisibility-inlines-hidden, что позволяет шаблонные символы по максимуму прятать внутри so’шек и бинарников.
Я всегда думал, что это влияет только на производительность, но не на память. Выходит, 512 метров это наверное уже слишком мало для проявления таких «квантовых эффектов» :) Мб boost тогда собирался без -fvisiblity=hidden -fvisibility-inlines-hidden (кстати в генте не стесняются калечить cflags, выставленные апстримом)
Исправление annulen, :
Когда шаблон инстанцируется с разными параметрами, то для каждого набора параметров генерируется свой набор символов (т.е. каждый метод, v-таблица и т.п. имеют отдельный символ для каждого варианта параметров шаблона). Линкер про С++ ни сном, ни духом не ведает и считает, что это все разные сишные функции/переменные. В результате таблица символов может стать сильно больше, чем для нешаблонного кода, и это существенно замедляет линковку (кстати, этот эффект послужил мотивацией для создания ld.gold). Чтобы уменьшить масштаб проблемы С++ код рекомендуется собирать с -fvisiblity=hidden -fvisibility-inlines-hidden, что позволяет шаблонные символы по максимуму прятать внутри so’шек и бинарников.
Я всегда думал, что это влияет только на производительность, но не на память. Выходит, 512 метров это наверное уже слишком мало для проявления таких «квантовых эффектов» :) Мб boost тогда собирался без -fvisiblity=hidden -fvisibility-inlines-hidden (кстати в генте не стесняются калечить cflags, выставленные апстримными проектами)
Исправление annulen, :
Когда шаблон инстанцируется с разными параметрами, то для каждого набора параметров генерируется свой набор символов (т.е. каждый метод, v-таблица и т.п. имеют отдельный символ для каждого варианта параметров шаблона). Линкер про С++ ни сном, ни духом не ведает и считает, что это все разные сишные функции/переменные. В результате таблица символов может стать сильно больше, чем для нешаблонного кода, и это существенно замедляет линковку (кстати, этот эффект послужил мотивацией для создания ld.gold). Чтобы уменьшить масштаб проблемы С++ код рекомендуется собирать с -fvisiblity=hidden -fvisibility-inlines-hidden, что позволяет шаблонные символы по максимуму прятать внутри so’шек и бинарников.
Я всегда думал, что это влияет только на производительность, но не на память. Выходит, 512 метров это наверное уже слишком мало для проявления таких «квантовых эффектов» :) Мб boost тогда собирался без -fvisiblity=hidden -fvisibility-inlines-hidden
Исправление annulen, :
Когда шаблон инстанцируется с разными параметрами, то для каждого набора параметров генерируется свой набор символов (т.е. каждый метод, v-таблица и т.п. имеют отдельный символ для каждого варианта параметров шаблона). Линкер про С++ ни сном, ни духом не ведает и считает, что это все разные сишные функции/переменные. В результате таблица символов может стать сильно больше, чем для нешаблонного кода, и это существенно замедляет линковку (кстати, этот эффект послужил мотивацией для создания ld.gold). Чтобы уменьшить масштаб проблемы С++ код рекомендуется собирать с -fvisiblity=hidden -fvisibility-inlines-hidden, что позволяет шаблонные символы по максимуму прятать внутри so’шек и бинарников.
Я всегда думал, что это влияет только на производительность, но не на память но 512 метров это наверное уже слишком мало для проявления таких «квантовых эффектов» :) Мб boost тогда собирался без -fvisiblity=hidden -fvisibility-inlines-hidden
Исходная версия annulen, :
Когда шаблон инстанцируется с разными параметрами, то для каждого набора параметров генерируется свой набор символов (т.е. каждый метод, v-таблица и т.п. имеют отдельный символ для каждого варианта параметров шаблона). Линкер про С++ ни сном, ни духом не ведает и считает, что это все разные сишные функции/переменные. В результате таблица символов может стать сильно больше, чем для нешаблонного кода, и это существенно замедляет линковку (кстати, этот эффект послужил мотивацией для создания ld.gold). Чтобы уменьшить масштаб проблемы С++ код рекомендуется собирать с -fvisiblity=hidden -fvisibility-inlines-hidden, что позволяет шаблонные символы по максимуму прятать внутри so’шек и бинарников.
Я всегда думал, что это только на производительность влияет, но 512 метров это наверное уже слишком мало для проявления таких «квантовых эффектов» :) Мб boost тогда собирался без -fvisiblity=hidden -fvisibility-inlines-hidden