Описание тега restrict-qualifier

Restrict is a keyword that could applied to a pointer to an object. It makes this pointer the one and only way to access the data of that object.
4 ответа

Почему компилятор не генерирует предупреждение или ошибку, если некоторые ограничительные указатели указывают на один и тот же объект?

Если у нас есть функция: void func(int *restrict a, int *restrict b, int *restrict c) { *c = *a + *b; } В принципе, этот код может привести к некоторой ошибке: int aa = 1; func(&aa, &aa, &aa); потому что в func, *a *b *c будет тот же объ…
18 май '13 в 06:23
1 ответ

Определение переменной как автоограничение

Насколько я понимаю restrict, он помечает указатель как единственную ссылку на конкретные данные в функции. Я обычно вижу, что это используется в параметрах функции, но это также кажется полезным: char *restrict a = get_some_string( ); char *restric…
25 июн '13 в 18:39
1 ответ

Аргументы шаблона типа restrict-pointer и переопределение виртуальных методов шаблонного базового класса

Я полагаю, что следующее должно компилироваться и связываться, но это не так: template<class S> class A { public: virtual int foo(S arg) = 0; virtual ~A() { } }; class B : public A<int* __restrict__> { public: int foo(int* __restrict__ a…
4 ответа

Предотвращение наложения двух внутренних объектов

У меня есть функция подписи, похожая на это void Mutliply(const MatrixMN& a, const MatrixMN& b, MatrixMN& out); Внутри матричный класс имеет float* data; это представляет m x n компоненты. Я хотел бы сказать компилятору, что a а также b …
09 июн '11 в 02:18
3 ответа

Допустимо ли псевдоним "const restrict" аргументы указателя?

Если dot_product объявлен как float dot_product(const float* restrict a, const float* restrict b, unsigned n); будет называть это с dot_product(x, x, x_len) быть "неопределенным", в соответствии со стандартом C99? редактировать x это указатель, коне…
1 ответ

Псевдонимы аргументов в strtol

Вот как strtol должен быть объявлен в соответствии с § 7.22.1.4 из C11 (n1570): #include <stdlib.h> long int strtol (const char *restrict nptr, char **restrict endptr, int base); Насколько я знаю, restrict Ключевое слово означает, что объект, …
14 фев '13 в 16:39
4 ответа

Как сказать компилятору C или C++, что указатели не являются псевдонимами

У меня есть функция, которая получает массив указателей, например, так: void foo(int *ptrs[], int num, int size) { /* The body is an example only */ for (int i = 0; i < size; ++i) { for (int j = 0; j < num-1; ++j) ptrs[num-1][i] += ptrs[j][i];…
4 ответа

При использовании ограничительного указателя в C, можно ли изменить переменную, используя ее начальный идентификатор?

При использовании restrict Указатель на C, можно ли изменить переменную, используя ее начальный идентификатор? Например: int foo = 0; int * restrict fooPtr = &foo; ++(*fooPtr); // Part 1: foo is 1 (OK) ++foo; // Part 2: foo is 2 (Is this OK?) in…
14 окт '10 в 17:56
1 ответ

Поддерживает ли clang++ __restrict?

Следующий код компилируется с g++ 4.7.1, но не clang 3.1 struct A { int foo(); }; int A::foo() __restrict { return 0; } int main(int argc, char * argv[]) { A a; return a.foo(); } Поддерживает ли Clang __restrict? или это использует определенный синт…
06 окт '12 в 02:58
1 ответ

Опасно ли вызывать функцию и передавать ей ограниченный указатель?

Рассмотрим эти две функции: void foo(char * __restrict localPtr) { // some work with localPtr } void bar(char * __restrict ptr) { // some work with ptr foo(_ptr); // some other work with ptr } Как ptr был объявлен __restrict в bar, звонит foo() опас…
06 окт '12 в 15:06
1 ответ

Специализированные шаблоны на C++AMP ограничены лямбдами

Используя понимание этого вопроса (и нескольких других), я смог написать следующее для опроса нормального типа лямбда-функции (т. Е. Типа возврата, количества аргументов и т. Д.). // helper classes ======================================== template &…
4 ответа

Ключевое слово restrict - последствия для оптимизации и алиасинга

Я сталкивался с этими двумя разделами в стандарте C11, ссылаясь на restrict классификатор: 1 # 6.7.3-8 Объект, доступ к которому осуществляется через ограниченный указатель, имеет специальную связь с этим указателем. Эта связь, определенная в 6.7.3.…
31 авг '12 в 18:23
1 ответ

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

Я вижу практическое применение const volatile квалифицированная переменная, как const volatile uint64_t seconds_since_1970; если базовый аппаратный механизм обновляет значение каждую секунду, но переменная недоступна для записи в (возможно, встроенн…
24 янв '12 в 15:17
0 ответов

__restrict в g++ и MSVC с синтаксисом массива

Я в процессе обновления критичных для производительности библиотек для использования restrict, как реализовано в C++11 g++ и MSVC с ключевым словом __restrict, Есть много подпрограмм и функций, которые выглядят примерно так: void f(float a[],float b…
19 сен '14 в 08:04
5 ответов

Ограничить классификатор для функций-членов (ограничить этот указатель)

Примечание: чтобы уточнить, вопрос не об использовании restrict ключевое слово в целом, но конкретно о применении его к функциям-членам, как описано здесь. GCC позволяет использовать __restrict__ (GNU++ эквивалент C99 restrict) классификатор на функ…
24 июл '11 в 17:34
0 ответов

C++: в обход строгого псевдонима через union, затем используйте расширение __restrict

Интересно, можно ли адаптировать строгие требования к псевдонимам к специально разработанным кейсам, сохраняя при этом строгий псевдоним в целом или оптимизацию -O2/-O3 соответственно. Чтобы быть более точным, в тех случаях, когда это необходимо, ст…
1 ответ

Ограничить тип возвращаемого значения и локальные переменные

Я хорошо понимаю, когда использовать ограничение для аргументов функции. Но все статьи, которые я нашел до сих пор, никогда не упоминают другие объявления (такие как возвращаемые значения функций и локальные переменные). Вот один пример: extern int …
31 янв '15 в 23:32
6 ответов

Что могут люди сделать из ограничительного квалификатора?

Если я получил C99 restrict ключевое слово right, указание на него указателя - это обещание, что данные, на которые он ссылается, не будут изменены за спиной компилятора через псевдонимы. В отличие от того, как я понимаю const Спецификатор - это док…
01 окт '09 в 22:12
1 ответ

Подробное, но читабельное объяснение ограничительного квалификатора?

Я наконец заинтересовался некоторыми функциями C99, и теперь у меня возникают проблемы с пониманием соответствующих разделов проекта C99. Я знаю, что restrict - это обещание, что два ограниченных квалифицированных указателя не будут указывать на оди…
16 фев '15 в 01:16
2 ответа

MSVC++ ограничить ключевое слово и локальные переменные

Я прочитал несколько постов по ключевому слову restrict. Но практически каждый пример, который я могу найти, кажется, ссылается на входные параметры только для функции и, возможно, одного значения. Мне нужно уточнить мое понимание. Я нашел функцию, …