Одна и та же физическая страница отображается на нескольких виртуальных адресах. Адреса < /h2>
В первом случае (на одной и той же странице отображается по нескольким адресам), рассмотрите следующую программу.
Код: Выделить всё
int test(int* p, int* q) {
if (p != q) {
auto t = *q;
*p = 1;
return t;
} else {
*p = 1;
return *q;
}
}
int test(int* p, int* q) {
*p = 1;
return *q;
}
Однако, если p и q являются указателями на различные виртуальные адреса, которые поддерживаются одной и той же физической страницей, эта оптимизация больше не является законной. Есть ли в C ++ что -то, что сделало бы такую программу настройки UB? Например, адрес 0x8000 может быть сопоставлен с другой страницей на каждом ядре, чтобы каждое ядро могло получить доступ к локальному состоянию потока без необходимости использовать регистр. В этом случае эти указатели явно не должны быть распределены между различными ядрами, например, Поместив их на кучу, но C ++ говорит что -нибудь об этом? Два указателя будут сравнивать равные (если они сравнивались), но они относятся к различным объектам (что, по -видимому, запрещено стандартом).
Подробнее здесь: https://stackoverflow.com/questions/796 ... pare-equal