Здравствуйте, Философ, Вы писали:
Ф>Здравствуйте, vlp, Вы писали:
Ф>>>Примеры дизассемблера тебе ничего не дадут: сегодня это один пример, а завтра версия джиттера поменяется.
vlp>>Я просил пример того, как прямо сейчас, с текущей версией компилятора и джиттера, возможна ситуация, которой тут всех пугают и как volatile в ней помогает.
vlp>>Тут, судя по ответам, в треде одни философы-теоретики, примеров нет.
Ф>Зачем тебе реальный пример? Т
ну как зачем — чтобы спровоцировать кого-то подумать
>Тебя теоритическая возможность засесть на пару недель дебага не достаточно?
неа
Ф>Даже на практике в диассемлерных листнингах встречается вот такое:
Ф>Ф>00007ff9`615508fb 488b4808 mov rcx,qword ptr [rax+8]
Ф>00007ff9`615508ff 83790c02 cmp dword ptr [rcx+0Ch],2
Ф>
Ф>Т.е. в этом случае действуют через промежуточный регистр.
в этом случае сначала из памяти читается адрес, а потом опять из памяти сравнивается значние по другому адресу. Это чтение поля класса, когда где-то есть указатель на инстанс (он грузится в ecx, а сам лежит в [rax+8]). Какое отношение это имеет к поведению volatile?
> Почему ты думаешь, что в случае ThrowIfDisposed() не может произойти тоже самое?
произойти что именно? Покажите пример того, что именно произойдет и от чего вас убережет volatile.