Spec-Zone.ru › GCC 4

7.8 Функциональная многоверсионизация

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

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

Spec-Zone.ru

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