[an error occurred while processing this directive]
|
Во первых он может применяться и не только к входным переменным. Никто не мешает пообъявлять локальных переменных-указателей и внутри функции. А объяснение (я думал понятно объяснил) у меня только такое, собственно как и в документации у TI. restrict говорит оптимизатору о том, что данное, куда указывает указатель, может быть изменено только с использованием этого указателя. И по другому указателю доступ именно к этому данному, куда он указывает в данный момент, до модификации этого указателя, ни на чтение, ни на запись, не производится. Это говорит компилятору о том, что не надо после каждой операции с данным по этому указателю его сохранять в память, и не надо каждый раз читать. Смысл этого слова в том, что компилятору сложно самому разобраться во всех пойнтерных перипетиях и высчитать моменты, когда два указателя вдруг укажут на одну ячейку памяти. Ему просто надо сказать - что этого не будет никогда. То есть нет "алиасинга" - указания более чем одним пойнтером на один адрес. А volatile - оно говорит, что данное может быть изменено откуда-то извне, из другого треда, из прерывания, еще откуда-то. Это сюда не относится. Кстати и массивы могут быть restrict, это означает, что никто не применяет какого-то пойнтера, который укажет на элемент массива, одновременно с работой с этим элементом по индексу.
E-mail: info@telesys.ru