Spec-Zone.ru › GCC 14

7.8 Многоверсионность функций

С помощью передней части GNU C++ для целей x86 можно указать несколько версий функции, где каждая функция специализирована для определённого функционального параметра целевой платформы. Во время выполнения соответствующая версия функции автоматически выполняется в зависимости от характеристик платформы выполнения. Вот пример.

__attribute__ ((target ("default")))
int foo ()
{
  // The default version of foo.
  return 0;
}

__attribute__ ((target ("sse4.2")))
int foo ()
{
  // foo version for SSE4.2
  return 1;
}

__attribute__ ((target ("arch=atom")))
int foo ()
{
  // foo version for the Intel ATOM processor
  return 2;
}

__attribute__ ((target ("arch=amdfam10")))
int foo ()
{
  // foo version for the AMD Family 0x10 processors.
  return 3;
}

int main ()
{
  int (*p)() = &foo;
  assert ((*p) () == foo ());
  return 0;
}

В приведенном выше примере создаются четыре версии функции foo. Первая версия foo с атрибутом «default» — это версия по умолчанию. Эта версия выполняется, когда ни одна другая целевая версия не подходит для выполнения на конкретной платформе. Новая версия foo создаётся путём использования той же подписи функции, но с другой строкой целевой платформы. Функция foo вызывается или к ней берётся указатель, как и в случае с обычной функцией. GCC позаботится о переключении на правильную версию во время выполнения. Дополнительную информацию см. в вики GCC о многоверсионности функций.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/gcc/Function-Multiversioning.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API