Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
restrict в C'99 и GCC 05.08.05 19:48
Автор: lunc <Alexander Krizhanovsky> Статус: Member
|
Здравствуйте, уважаемые!
Разъясните, плз, использование restrict. На сколько я понял, restrict обеспечивает неперекрываемость двух областей памяти на которые ссылаются указатели. Стало быть на следующий код GCC должен вурагаться, но никаких ругательств не видно.
Компиляю: gcc -Wall --std=c99 -o test test.c
void f(int n, int *restrict p1, int *restrict p2)
{
while (n--)
*p1++ = *p2++;
}
void
main ()
{
int *a = malloc(16);
memset(a, 1, 16);
f(4, a, a);
free(a);
}
|
|
Слегка наоборот 05.08.05 20:07
Автор: leo <Леонид Юрьев> Статус: Elderman Отредактировано 05.08.05 20:08 Количество правок: 1
|
"restrict" означает, что программист гарантирует выполнение условия "no aliasing". А не то, что компилятор проверяет "перекрытие" областей памяти или объектов.
"no pointer(s) aliasing" - это когда программист "обещает" компилятору, что в области кода где определен этот указатель, он не будет указывать на какой-либо другой доступный и изменяющийся объект. И стало быть компилятор может безбоязненно "закэшировать" значение (на которое указавает указатель) в регистрах CPU (или еще как нибудь), а в случае изменений записывать значение когда ему удобно (а __write_barrier() форсирует запись).
|
|
|