Компиляторы GCC и Clang предоставляют набор встроенных функций (__builtin_*
), которые позволяют программистам напрямую использовать низкоуровневые операции, оптимизировать код и обращаться к специфическим возможностям процессора. Эти функции часто сопоставляются с аппаратными инструкциями или реализуются компилятором в эффективной форме.
Эти функции выполняют операции на уровне битового представления чисел.
- Описание: Подсчитывает количество установленных битов (1) в двоичном представлении числа типа
unsigned int
. - Параметры:
unsigned int x
: Входное число.
- Возвращаемое значение: Количество единиц в двоичном представлении
x
.
- Описание: Подсчитывает количество установленных битов в числе типа
unsigned long
. - Параметры:
unsigned long x
: Входное число.
- Возвращаемое значение: Количество единиц в двоичном представлении
x
.
- Описание: Подсчитывает количество установленных битов в числе типа
unsigned long long
. - Параметры:
unsigned long long x
: Входное число.
- Возвращаемое значение: Количество единиц в двоичном представлении
x
.
- Описание: Подсчитывает количество завершающих нулей в числе типа
unsigned int
. - Параметры:
unsigned int x
: Входное число.
- Возвращаемое значение: Количество завершающих нулей в двоичном представлении
x
. Возвращает неопределённое значение, еслиx
равно 0.
- Описание: Подсчитывает количество завершающих нулей в числе типа
unsigned long
. - Параметры:
unsigned long x
: Входное число.
- Возвращаемое значение: Количество завершающих нулей в двоичном представлении
x
. Возвращает неопределённое значение, еслиx
равно 0.
- Описание: Подсчитывает количество завершающих нулей в числе типа
unsigned long long
. - Параметры:
unsigned long long x
: Входное число.
- Возвращаемое значение: Количество завершающих нулей в двоичном представлении
x
. Возвращает неопределённое значение, еслиx
равно 0.
- Описание: Подсчитывает количество ведущих нулей в числе типа
unsigned int
. - Параметры:
unsigned int x
: Входное число.
- Возвращаемое значение: Количество ведущих нулей в двоичном представлении
x
. Возвращает неопределённое значение, еслиx
равно 0.
- Описание: Подсчитывает количество ведущих нулей в числе типа
unsigned long
. - Параметры:
unsigned long x
: Входное число.
- Возвращаемое значение: Количество ведущих нулей в двоичном представлении
x
. Возвращает неопределённое значение, еслиx
равно 0.
- Описание: Подсчитывает количество ведущих нулей в числе типа
unsigned long long
. - Параметры:
unsigned long long x
: Входное число.
- Возвращаемое значение: Количество ведущих нулей в двоичном представлении
x
. Возвращает неопределённое значение, еслиx
равно 0.
- Описание: Возвращает чётность количества единиц в числе типа
unsigned int
. Возвращает 1, если количество единиц нечётное, иначе 0. - Параметры:
unsigned int x
: Входное число.
- Возвращаемое значение:
1
, если количество единиц нечётное,0
в противном случае.
- Описание: Возвращает чётность количества единиц в числе типа
unsigned long
. - Параметры:
unsigned long x
: Входное число.
- Возвращаемое значение:
1
, если количество единиц нечётное,0
в противном случае.
- Описание: Возвращает чётность количества единиц в числе типа
unsigned long long
. - Параметры:
unsigned long long x
: Входное число.
- Возвращаемое значение:
1
, если количество единиц нечётное,0
в противном случае.
Эти функции проверяют условия переполнения при арифметических операциях.
- Описание: Выполняет сложение и проверяет наличие переполнения.
- Параметры:
T x
: Первый операнд.T y
: Второй операнд.T* result
: Указатель для сохранения результата.
- Возвращаемое значение: Возвращает
1
, если произошло переполнение, иначе0
.
- Описание: Выполняет вычитание и проверяет наличие переполнения.
- Параметры:
T x
: Первый операнд.T y
: Второй операнд.T* result
: Указатель для сохранения результата.
- Возвращаемое значение: Возвращает
1
, если произошло переполнение, иначе0
.
- Описание: Выполняет умножение и проверяет наличие переполнения.
- Параметры:
T x
: Первый операнд.T y
: Второй операнд.T* result
: Указатель для сохранения результата.
- Возвращаемое значение: Возвращает
1
, если произошло переполнение, иначе0
.
Эти функции предоставляют эффективные способы работы с блоками памяти.
- Описание: Копирует блок памяти из источника в назначение.
- Параметры:
void* dest
: Указатель на место назначения.const void* src
: Указатель на источник.size_t n
: Количество байтов для копирования.
- Возвращаемое значение: Указатель на место назначения (
dest
).
- Описание: Заполняет блок памяти указанным значением.
- Параметры:
void* dest
: Указатель на блок памяти для заполнения.int c
: Значение для заполнения.size_t n
: Количество байтов для заполнения.
- Возвращаемое значение: Указатель на место назначения (
dest
).
- Описание: Перемещает блок памяти из источника в назначение. Безопасно работает с перекрывающимися областями памяти.
- Параметры:
void* dest
: Указатель на место назначения.const void* src
: Указатель на источник.size_t n
: Количество байтов для перемещения.
- Возвращаемое значение: Указатель на место назначения (
dest
).
Эти функции предоставляют подсказки компилятору для оптимизации потока выполнения.
- Описание: Предоставляет компилятору информацию о вероятности выполнения условия.
- Параметры:
long exp
: Выражение для оценки.long c
: Ожидаемое значение выражения.
- Возвращаемое значение: Возвращает значение
exp
. Компилятор оптимизирует код, исходя из предположения, чтоexp == c
.
Эти функции помогают в проверке типов и оценке констант.
- Описание: Проверяет, совместимы ли два типа.
- Параметры:
T1
: Первый тип.T2
: Второй тип.
- Возвращаемое значение: Возвращает
1
, если типы совместимы, иначе0
.
- Описание: Проверяет, является ли значение константой времени компиляции.
- Параметры:
exp
: Выражение для проверки.
- Возвращаемое значение: Возвращает
1
, если выражение является константой времени компиляции, иначе0
.
Эти функции предоставляют базовые математические и вспомогательные операции.
- Описание: Возвращает абсолютное значение целого числа.
- Параметры:
int x
: Входное число.
- Возвращаемое значение: Абсолютное значение
x
.
- Описание: Возвращает абсолютное значение числа типа
long
. - Параметры:
long x
: Входное число.
- Возвращаемое значение: Абсолютное значение
x
.
- Описание: Возвращает абсолютное значение числа типа
long long
. - Параметры:
long long x
: Входное число.
- Возвращаемое значение: Абсолютное значение
x
.
- Эти встроенные функции специфичны для платформы и оптимизируются компилятором.
- Некоторые функции, такие как
__builtin_expect
, могут не давать прироста производительности во время выполнения, но помогают в оптимизации кода на этапе компиляции. - Функции, такие как
__builtin_popcount
, могут использовать аппаратные инструкции (например, POPCNT), если они поддерживаются процессором.