Не может знать, как я буду реализовывать эти функции в каком-то другом модуле компиляции.
Это ключ - поскольку компилятор не может (в общем) знать о реализации вызовов функций, он не может переместить хранилище на _field
вне этих вызовов функций.
Обычно, поскольку _field
доступен вне SomeClass::store()
(это не локально), компилятор не может знать, был ли он изменен внешней функцией, поэтому он должен выполнить сохранение до _field
между последовательность вызова функции указывает.
Базовой аппаратной платформе может потребоваться некоторое внимание в виде барьеров памяти или сбросов кеша, чтобы справиться с операциями кэширования или неупорядоченными операциями, которые происходят на аппаратном обеспечении. Внедрение платформой API-интерфейсов mutex будет решать эти проблемы в случае необходимости.