Нет, стандарт не предъявляет требований к тому, чтобы детали реализации были одинаковыми.1.9 / 1:
Семантические описания в этом международном стандарте определяют параметризованную недетерминированную абстрактную машину.Настоящий международный стандарт не предъявляет требований к структуре соответствующих реализаций.В частности, им не нужно копировать или эмулировать структуру абстрактной машины.Скорее, соответствующие реализации требуются для эмуляции (только) наблюдаемого поведения абстрактной машины, как описано ниже.
Таким образом, только «наблюдаемое поведение» должно быть таким же.Наблюдаемое поведение определено в 1.9 / 6:
Наблюдаемое поведение абстрактной машины - это последовательность операций чтения и записи в изменчивые данные и обращения к функциям ввода-вывода библиотеки.
Точные инструкции, используемые для достижения этой цели, не являются "наблюдаемым поведением", и в вашем примере, поскольку массив не volatile
, порядок записи также не наблюдается.На самом деле, если вы не используете массив позже, сами записи не наблюдаются.Для оптимизатора реализации было бы законно успешно удалить весь фрагмент кода в одном случае, но не в другом, хотя, возможно, удивительно, что он может управлять только одним.