2015-12-04 4 views
1

В соответствии с gnu (https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Function-Attributes.html) атрибута NoClone определяется как:Назначение атрибута функции NoClone

Этот атрибут функция предотвращает функцию из рассматриваемых для клонирования-механизма, который производит специализированные копии функций и которое (в настоящее время), выполняемых путем межпроцедурного распространения.

Что выше определения следует, о когда и где мы должны использовать этот атрибут функции?

+0

Догадка - наличие простого экземпляра функции помогает в отладке, поэтому единственное место для установки точки останова и/или изменения ее кода на лету. – Netch

+1

Существует аргументированный пример этой ошибки clang [здесь] (https://llvm.org/bugs/show_bug.cgi?id=22311) и исходный патч gcc [здесь] (https: //gcc.gnu. орг/мл/GCC-пластыри/2009-07/msg01021.html). – dragosht

ответ

3

Я знаю два случая использования этого атрибута, оба они очень специфичны для gcc. К ним относятся:

  1. Если взять адрес метки (расширение GNU), адрес будет отличаться между функциональными специализаций, если тело функции клонированы. Вы должны использовать атрибут, если вы ожидаете, что адреса будут .

  2. __builtin_return_address может возвращать разные обратные адреса, в то время как без клонирования они будут одинаковыми.

Советуем не использовать этот атрибут и позволить оптимизатору выполнять свою работу.

Смежные вопросы