Есть ли практическое применение для указателя "volatile restrict"?

Я вижу практическое применение const volatile квалифицированная переменная, как

const volatile uint64_t seconds_since_1970;

если базовый аппаратный механизм обновляет значение каждую секунду, но переменная недоступна для записи в (возможно, встроенном) оборудовании. И поскольку все три (четыре в C11) квалификатора типа считаются независимыми, все комбинации, по-видимому, разрешены. Но я в недоумении представляю реальную ситуацию, когда restrict volatile квалифицированный указатель действительно имеет смысл:

uint32_t * restrict volatile pointer_to_some_uint32;

[Редактировать: уточнить: оба volatile а также restrict применять к указателю, а не к объекту, на который указывает!]

Это конструкция разрешена языком, но бесполезна сама по себе, или я упускаю какую-то область приложения, где это может быть полезным?

1 ответ

Решение

Без ограничений, энергонезависимый указатель может создать псевдоним энергозависимого указателя. Таким образом, после каждой модификации объекта с помощью энергозависимого указателя значения в кэше регистров всех потенциально ссылающихся объектов одного и того же типа должны быть отброшены.

С помощью restrict вы можете указать компилятору, что указатель volatile не будет псевдонимом, так что накладные расходы volatile применяются только к указанному объекту, а не ко всем другим объектам того же типа, которые могут быть доступны через указатели.

Другие вопросы по тегам