информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
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() форсирует запись).
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach