在记忆条件下有文字是什么意思?

What does it mean to have a literal in an condition for memory?

给定以下示例:

//this gets allocated
var foo = 42;

//what happens to 0?
if (foo > 0)
{
}

出于好奇,0 在内存 consumption/instructions 方面发生了什么?

我一直认为这是一些指令被触发到处理器而忘记了。不需要存储在 RAM 中的任何内容(只要它是文字而不是引用)。

参加完这个discussion我有点困惑。

0 是否以某种方式在内存中分配?是否需要进行垃圾回收?有没有一种文字可以改变这种情况?

引擎盖下发生了什么?

//this gets allocated
var foo = 42;

"allocated" 不是真正正确的词;那是堆栈上的本地值类型;它不是 "allocation" 本身。就是 ldc.i4 42, stloc.0.

//what happens to 0?
if (foo > 0)
{
}

再次声明,这不是分配;没有什么可收集的;这只是 ldloc.0ldc.i4.0cgtbrfalse.s。没有分配。这里的一切都只是堆栈上的值。 GC是指托管堆,即对象。

在实现方面:进入方法会在堆栈上保留已知数量的 space(由编译器计算)。离开方法 什么都不做 - 它保持内存不变,只是从正在使用的堆栈中减去相同的数字 space.

So 0 is stored on the stack the same way as foo?

不太一样; foo 是局部的,0 是短暂的。基本上本地人先来,然后瞬态堆栈 space 在本地人之后开始。临时堆栈 space 用于(至少在理论上 - JIT 可能会注册它)进行中的操作,包括加载文字值。临时区域只是非正式定义的(JIT 理解它,但没有正式声明)——并且只在单个操作期间持续。局部变量是每个方法范围。