лишь для литералов, лишь простых типов, лишь некоторых архитектур (на некоторых невозможно поместить литерал в команду, да даже на x64 нет команд add/sub/cmp/and/or/xor/test RAX,imm64, одна лишь mov и всё), может быть компиляторно-оптимизаторно-зависимым.
Ничего не понял из этого. В отношении моего вышесказанного, дополню схематично (мое сугубо личное представление, не претендующее на универсальность, с тем, с которым я работал):
Пишем
Код:
int i
Компилятор выделяет адрес для двух байт, который определяется как "адрес программного кода плюс (сместиться) столько-то байт по мнению компилятора".
При определенной сноровке, в этот адрес можно спокойно писать значения (в том числе и из других программ) так как адрес известен и залезть вместо одной переменной в другую не получится.
Пишем
Код:
const int i=1
Компилятор ищет везде в человеческом коде все i, заменяет их на 1, а затем формирует объектный код, в котором единица может находиться в середине блока с адресом "адрес программы по мнению компилятора" то есть внутри блока памяти с определенным адресом, выделенного компилятором для программного кода. И каким образом можно обратиться к такой единице (например, поменять ее на двойку) я вообще не представляю...указав вместо адреса команду, которая оперирует этой единицей?... ..не знаю.