Информация об изменениях

Сообщение Re[2]: Как вышло, что наложение предполагается по умолчанию? от 15.09.2021 11:02

Изменено 15.09.2021 12:33 Zhendos

Re[2]: Как вышло, что наложение предполагается по умолчанию?
Здравствуйте, imh0, Вы писали:

I>Здравствуйте, Евгений Музыченко, Вы писали:


I>Поэтому в С++ этот вопрос теряет актуальность.


Почему это?

Возьмите

int f(int &a, int &b)
{
   a += 1;
   b += 1;
   return a + b;
}

int f2(int * a, int *  b)
{
    *a += 1;
    *b += 1;
    return *a + *b;
}


в обоих случаях комплиятор в оптимизируещем режиме сгенерирует одинаковый код,
и так же будет предполагать что "a" и "b" являются "алиасами" на один и тот же адрес.
А вот если добавить во втором случае "int * __restrict", то компилятор в уже сможет
использовать тот факт что "a" и "b" указывают на разный адрес.

Ссылки в C++ никакого отношения к "__restrict" не имеют.
Re[2]: Как вышло, что наложение предполагается по умолчанию?
Здравствуйте, imh0, Вы писали:

I>Здравствуйте, Евгений Музыченко, Вы писали:


I>Поэтому в С++ этот вопрос теряет актуальность.


Почему это?

Возьмите

int f(int &a, int &b)
{
   a += 1;
   b += 1;
   return a + b;
}

int f2(int * a, int *  b)
{
    *a += 1;
    *b += 1;
    return *a + *b;
}


в обоих случаях комплиятор в оптимизируещем режиме сгенерирует одинаковый код,
и так же будет предполагать что "a" и "b" являются "алиасами" на один и тот же адрес.
А вот если добавить во втором случае "int * __restrict", то компилятор сможет
использовать тот факт что "a" и "b" указывают на разный адрес и код будет разный между
кодом со ссылками и "restrict" указателями.

Ссылки в C++ никакого отношения к "__restrict" не имеют.