Атрибуты gcc для функций инициализации при первом использовании

Я использовал атрибуты gcc const и pure для функций, возвращающих указатель на " постоянные »данные, которые выделяются и инициализируются при первом использовании, т.е. когда функция будет возвращать одно и то же значение при каждом вызове. В качестве примера (не мой случай использования, а хорошо известный пример) подумайте о функции, которая выделяет и вычисляет таблицы поиска триггеров при первом вызове и просто возвращает указатель на существующие таблицы после первого вызова.

Проблема : Мне сказали, что такое использование неверно, потому что эти атрибуты запрещают побочные эффекты, и что компилятор может даже полностью оптимизировать вызов в некоторых случаях, если возвращаемое значение не используется. Безопасно ли мое использование атрибутов const / pure , или есть какой-либо другой способ сообщить компилятору, что вызовы функции N> 1 эквивалентны 1 вызов функции, но этот 1 вызов функции не эквивалентен 0 вызовам функции? Или другими словами, что у функции есть побочные эффекты только при первом вызове?

7
задан R.. 29 July 2011 в 01:26
поделиться