繁体   English   中英

在内存条件下使用文字意味着什么?

[英]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会发生什么?

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

在参加了讨论之后,我有点困惑。

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

引擎盖下会发生什么?

//this gets allocated
var foo = 42;

“分配”并不是一个正确的词; 这是堆栈上的一个局部值类型; 它不是这样的“分配”。 它只是ldc.i4 42stloc.0

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

再说一次,这不是分配。 没有什么可收集的; 这只是ldloc.0ldc.i4.0cgtbrfalse.s 没有分配。 这里的所有内容只是堆栈中的值。 GC是指托管堆,即对象。

在实现方面:输入方法将在堆栈上保留已知数量的空间(由编译器计算)。 保留该方法不会执行任何操作 -它使该内存保持不变,只是从使用中的堆栈空间中减去相同的数字。

所以0foo一样被存储在堆栈中?

不太一样。 foo是本地foo0是瞬态变量。 基本上,本地人首先出现,然后临时堆栈空间在本地人之后开始。 临时堆栈空间(至少在理论上-JIT可能会对其进行注册)用于进行中的操作,包括加载文字值。 临时区域仅是非正式定义的(JIT可以理解,但未正式声明),并且仅在单个操作期间有效。 局部变量是每个方法的作用域。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM