Какие предположения могут сделать компиляторы C ++ о указателях, которые сравнивают равные?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Какие предположения могут сделать компиляторы C ++ о указателях, которые сравнивают равные?

Сообщение Anonymous »

Я заинтересован в том, какие предположения компиляторы C ++ могут сделать о указателях, которые не сравнивают равные. В частности, в следующих ситуациях: < /p>

Одна и та же физическая страница отображается на нескольких виртуальных адресах. Адреса < /h2>
В первом случае (на одной и той же странице отображается по нескольким адресам), рассмотрите следующую программу.

Код: Выделить всё

int test(int* p, int* q) {
if (p != q) {
auto t = *q;
*p = 1;
return t;
} else {
*p = 1;
return *q;
}
}
Поскольку p и q оба являются указателями на один и тот же (нелетучий) тип, который не сравнится равным, это может быть поднято для C ++, чтобы предположить, что запись в p может быть поднят из условной и оптимизированной программы на:
int test(int* p, int* q) {
*p = 1;
return *q;
}

Однако, если p и q являются указателями на различные виртуальные адреса, которые поддерживаются одной и той же физической страницей, эта оптимизация больше не является законной. Есть ли в C ++ что -то, что сделало бы такую ​​программу настройки UB? Например, адрес 0x8000 может быть сопоставлен с другой страницей на каждом ядре, чтобы каждое ядро ​​могло получить доступ к локальному состоянию потока без необходимости использовать регистр. В этом случае эти указатели явно не должны быть распределены между различными ядрами, например, Поместив их на кучу, но C ++ говорит что -нибудь об этом? Два указателя будут сравнивать равные (если они сравнивались), но они относятся к различным объектам (что, по -видимому, запрещено стандартом).


Подробнее здесь: https://stackoverflow.com/questions/796 ... pare-equal
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Какие предположения могут сделать компиляторы C ++ о указателях, которые сравнивают равные?
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Предположения C++
    Anonymous » » в форуме C++
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как сохранить ошибку/остаток mpmath.findroot для определенного входного предположения?
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как сохранить ошибку/остаток mpmath.findroot для определенного входного предположения?
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Проблема при написании программы предположения Гольдбаха.
    Anonymous » » в форуме C++
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»