Как *restrict / *__restrict__ работает в C / C++?

Вот код, который я написал (используя __restrict__ расширение GCC для C++):

#include 

using namespace std;

int main(void) {
    int i = 7;
    int *__restrict__ a = &i;
    *a = 5;
    int *b = &i, *c = &i;
    *b = 8;
    *c = 9;

    cout << **&a << endl; // *a - which prints 9 in this case

    return 0;
}

Или версия на C (если версия на C++ не ясна из-за использования расширения, которое поддерживает каждый популярный компилятор C++), используя GCC:

#include 

int main(void) {
    int i = 7;
    int *restrict a = &i;
    *a = 5;
    int *b = &i, *c = &i;
    *b = 8;
    *c = 9;

    printf("%d \n", **&a); // *a - which prints 9 in this case

    return 0;
}

Из того, что я прочитал, если я делаю *a = 5, это изменяет значение памяти, на которую он, a, указывает; после этого память, на которую он указывает, не должна быть изменена никем другим, кроме a, что означает, что эти программы неверны, потому что b и c изменяют ее после этого. Или, даже если b сначала модифицирует i, то после этого только a должен иметь доступ к этой памяти (i). Правильно ли я понимаю?

P.S.: Ограничение в этой программе ничего не меняет. С ограничением или без него, компилятор выдаст один и тот же ассемблерный код. Я написал эту программу только для того, чтобы прояснить ситуацию, она не является хорошим примером использования restrict. Хороший пример использования restrict вы можете увидеть здесь: http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html

7
задан Lilian A. Moraru 28 November 2011 в 18:57
поделиться