Вопрос смешивает два разных аспекта, связанных с «спецификацией» и «реализацией».
«Спецификация» определяет некоторые абстрактные правила, которые определяют, как язык ведет себя по отношению к абстрактной машине, с которой он работает,Адаптируйте эту «абстрактную машину» к «реальной» под ней, это цель компилятора (а не языка).
Что требует спецификация, так это то, что с точки зрения языка - «хранилище»(часть памяти с правильным адресом) дается только объектам, которые имеют имя (для существования области, в которой живет имя) или которые динамически распределяются с явным запросом (new
),Все остальное является «временным»: присваивать, копировать и перемещать как объект, но не требуется для существования в четко определенном и стабильном месте.По крайней мере, не для целей языка.
Конечно, это должно где-то оставаться (физически), так что вы можете - с помощью соответствующего приведения или преобразования - пытаться угадать адрес памяти.Но спецификация языка не дает какого-либо согласованного поведения, если вы пытаетесь его активно использовать.Это означает, что разные компиляторы могут вести себя по-разному и оптимизировать, тем лучше они могут соответствовать реальной машине, на которую они нацелены.