Значение / назначение __attribute ((const)) в g cc c ++ - PullRequest
0 голосов
/ 20 марта 2020

Есть ли какое-либо значение в использовании __attribute((const)) в g cc для программ на c ++ при объявлении функций или элементов stati c, которые, как может видеть компилятор, не обращаются к глобальной памяти?

Например,

int Add( int x , int y ) __attribute((const))
{
    return x+y;
}

Компилятор знает, что эта функция ограничена в объеме доступа к памяти. Атрибут добавляет что-нибудь? Если да, то что?

Спасибо,

Джо sh

1 Ответ

1 голос
/ 20 марта 2020

__attribute__((const)) в GNU C выражает намерение автора функции не зависеть ни от какого значения, кроме входных аргументов.

Это позволяет компилятору оптимизировать несколько вызовов с одинаковыми аргументами для такой функции в одном вызове без необходимости анализировать тело функции. Это особенно полезно, если тело функции находится в другой единице перевода.

В случае int Add( int x , int y ) __attribute__((const)) несколько вызовов, скажем, Add(2,3), могут быть объединены в один вызов, а возвращаемое значение может быть кэшируется, не зная, что на самом деле делает Add.

Он также позволяет компилятору проверять, действительно ли функция соответствует объявленному намерению.

См. эту статью LWN * 1016. * для более подробной информации и примера.

...