Хотя ответ Джеффа правильно, то есть, вы всегда можете сделать указатель на выделенный массив, тот факт, что компилятор знает во время компиляции, что tmpvalues не будет совмещенным, так как переменная объявлена как фактический массив, а не указатель. Единственные шансы на псевдоним массива - объявить указатель на него, поэтому, если вы этого не сделаете, нет необходимости объявлять его как restrict
. Это более очевидно, если tmpvalues
- единственная переменная, которую вы будете иметь в функции.
Проблема может возникнуть, если вы передадите указатель на другую функцию, тогда вы должны указать, ограничен ли полученный указатель или нет.
В документации я столкнулся, связанным с этой темой включает C99:
Пусть D будет декларация обычного идентификатора, который обеспечивает средство назначающего объект P в качестве ограничения квалифицированного указателя на тип T .
Обратите внимание, что это относится только к указателям.
от TI предоставляет некоторые подсказки по настройке производительности, используя ключевое слово restrict
. В дополнение ко всем подсказкам в разделе 3.3 приведены примеры, когда можно применить этот тип классификатора, а когда нет. Ищите объявление массива x
в середине страницы 16, он заявляет, что он не объявляет указатель и, следовательно, не может быть restrict
-qualified.
Какое предупреждение оно бросает? – dhein
«Недопустимое использование ограничения» - предполагается, что оно будет использоваться с указателями, а не с массивами (насколько я понимаю). Я мог бы делать float * ограничивать tmpvalues = malloc (sizeof (float) * 1000), но тогда я не выделяю на стек, который также может повлиять на производительность. Кроме того, говоря компилятору, что доступ к индексам массивов является безопасным (поэтому нет необходимости в защитных чтениях) кажется очень естественным расширением ограничения использования с указателями, поэтому интуитивно должен быть способ сделать это. –
Я сделал: float * ограничил tmpvalues = alloca (sizeof (float) * 1000); memset (tmpvalues, 0, sizeof (float) * 1000); и это измеримое улучшение, но я бы предпочел сделать это в стандартном (как в случае с жалобой C99) –