Описание тега 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…
06 мар '16 в 23:10
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 это указатель, коне…
18 дек '13 в 09:16
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];…
07 сен '11 в 03:08
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 &…
19 дек '13 в 17:08
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 соответственно. Чтобы быть более точным, в тех случаях, когда это необходимо, ст…
06 сен '13 в 21:46
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. Но практически каждый пример, который я могу найти, кажется, ссылается на входные параметры только для функции и, возможно, одного значения. Мне нужно уточнить мое понимание. Я нашел функцию, …
15 окт '13 в 22:09