在记忆条件下有文字是什么意思?
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.0
、ldc.i4.0
、cgt
、brfalse.s
。没有分配。这里的一切都只是堆栈上的值。 GC是指托管堆,即对象。
在实现方面:进入方法会在堆栈上保留已知数量的 space(由编译器计算)。离开方法 什么都不做 - 它保持内存不变,只是从正在使用的堆栈中减去相同的数字 space.
So 0
is stored on the stack the same way as foo
?
不太一样; foo
是局部的,0
是短暂的。基本上本地人先来,然后瞬态堆栈 space 在本地人之后开始。临时堆栈 space 用于(至少在理论上 - JIT 可能会注册它)进行中的操作,包括加载文字值。临时区域只是非正式定义的(JIT 理解它,但没有正式声明)——并且只在单个操作期间持续。局部变量是每个方法范围。
给定以下示例:
//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.0
、ldc.i4.0
、cgt
、brfalse.s
。没有分配。这里的一切都只是堆栈上的值。 GC是指托管堆,即对象。
在实现方面:进入方法会在堆栈上保留已知数量的 space(由编译器计算)。离开方法 什么都不做 - 它保持内存不变,只是从正在使用的堆栈中减去相同的数字 space.
So
0
is stored on the stack the same way asfoo
?
不太一样; foo
是局部的,0
是短暂的。基本上本地人先来,然后瞬态堆栈 space 在本地人之后开始。临时堆栈 space 用于(至少在理论上 - JIT 可能会注册它)进行中的操作,包括加载文字值。临时区域只是非正式定义的(JIT 理解它,但没有正式声明)——并且只在单个操作期间持续。局部变量是每个方法范围。