[devel] Re: C++ ABI
Mikhail Zabaluev
=?iso-8859-1?q?mhz_=CE=C1_altlinux=2Eorg?=
Ср Окт 19 00:31:46 MSD 2005
В Втр, 18/10/2005 в 11:12 +0400, Alexey Rusakov пишет:
> >>>Что это означает? Если какая-то библиотека содержит шаблон, то
> >>>бинарного кода в самом библиотеке нет, а он будет порождаться каждый раз
> >>>при инстанцировании?
> >>>
> >>>
> >>Да.
> >>
> >>
> >Тут есть нюанс: весь такой код современными компиляторами генерируется в
> >специальных common-секциях и под символами с пометкой "слабое
> >связывание". Это обычно дает возможность отбросить избыточные копии
> >идентично инстанцированных шаблонов при линковке.
> >
> >
> Насколько я понимаю, это работает только при статическом связывании?
Не проверял, но думаю да. В пределах одного DSO/executable порождения
редуцируются, но между ними вряд ли. Это бы убивало преимущества
динамического связывания лишними неочевидными зависимостями.
Однако, в силу механизма связывания, принятого в ELF, в runtime в одном
процессе вполне может использоваться всего одна копия из всего набора
идентичных порождений метода, остальные висят в адресном пространстве
мертвым грузом (и возможно, частично даже не подкачиваются с диска).
Это, опять-таки, моя теория.
Подробная информация о списке рассылки Devel