Re: Безопасно ли присваивать один указатель другому?..
От: ononim  
Дата: 22.03.18 21:03
Оценка:
O>x = y;
Гипотетически, указатель может представлять собой пару селектор:адрес. И опять же, гипотетически, y может быть переменной гдето в памяти, а x — компилятор решит разместить в регистрах "прямо ща". И далее читаем тут:

If the destination operand is a segment register (DS, ES, FS, GS, or SS), the source operand must be a valid segment selector. In protected mode, moving a segment selector into a segment register automatically causes the segment descriptor information associated with that segment selector to be loaded into the hidden (shadow) part of the segment register. While loading this information, the segment selector and segment descriptor information is validated (see the "Operation" algorithm below).

..то есть, присвоение сегментому регистру значения невалидного селектора (в защищенном режиме сегментные регистры содержат селекторы) вызывает падение.
Но поскольку чуть более чем почти все оси, работающие в защищенном режиме, предоставляют процессу одно плоское адресное пространство, то хранить значение селектора в переменной-указателе смысла нету, потому присвоение указателя не хряпнется.
Но в принципе могут быть более другие архитектуры, у которых например все обращения к памяти могут делаться только через какой нить спец. регистр — указатель, и который к примеру может принимать только выровненное на размер слвоа значение, а попытка присвоения такому регистру невыровненного значения вызовет ошибку защиты.
Как много веселых ребят, и все делают велосипед...
Отредактировано 22.03.2018 21:11 ononim . Предыдущая версия . Еще …
Отредактировано 22.03.2018 21:07 ononim . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.