Spec-Zone.ru › GCC 12

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-12.2.0/gcc/Function-Multiversioning.html

Spec-Zone.ru

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