Может ли оптимизация, выполненная компилятором C # или JITter иметь видимые побочные эффекты?
Один пример, который я отключил.
var x = new Something();
A(x);
B(x);
При вызове A (x)
x
гарантированно сохранится до конца A
- потому что B
использует тот же параметр. Но если B
определено как
public void B(Something x) { }
, то B (x)
может быть удален оптимизатором, и тогда вызов GC.KeepAlive (x)
может
Может ли эта оптимизация действительно выполняться JITter?
Существуют ли другие оптимизации, которые могут иметь видимые побочные эффекты, кроме изменений трассировки стека?