Подтвердить что ты не робот

Существует ли практическое использование указателя `volatile restrict`?

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

const volatile uint64_t seconds_since_1970;

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

uint32_t * restrict volatile pointer_to_some_uint32;

[РЕДАКТИРОВАТЬ: Для пояснения: оба указателя volatile и restrict применяются к указателю, а не к объекту, на который указывает!]

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

4b9b3361

Ответ 1

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

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