Сообщение Re[2]: Как вышло, что наложение предполагается по умолчанию? от 15.09.2021 11:02
Изменено 15.09.2021 12:33 Zhendos
Re[2]: Как вышло, что наложение предполагается по умолчанию?
Здравствуйте, imh0, Вы писали:
I>Здравствуйте, Евгений Музыченко, Вы писали:
I>Поэтому в С++ этот вопрос теряет актуальность.
Почему это?
Возьмите
в обоих случаях комплиятор в оптимизируещем режиме сгенерирует одинаковый код,
и так же будет предполагать что "a" и "b" являются "алиасами" на один и тот же адрес.
А вот если добавить во втором случае "int * __restrict", то компилятор в уже сможет
использовать тот факт что "a" и "b" указывают на разный адрес.
Ссылки в C++ никакого отношения к "__restrict" не имеют.
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>Поэтому в С++ этот вопрос теряет актуальность.
Почему это?
Возьмите
в обоих случаях комплиятор в оптимизируещем режиме сгенерирует одинаковый код,
и так же будет предполагать что "a" и "b" являются "алиасами" на один и тот же адрес.
А вот если добавить во втором случае "int * __restrict", то компилятор сможет
использовать тот факт что "a" и "b" указывают на разный адрес и код будет разный между
кодом со ссылками и "restrict" указателями.
Ссылки в C++ никакого отношения к "__restrict" не имеют.
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" не имеют.