是否一个小的整数的C#字面(e.g.12
)使用4个字节堆栈的像的整数变量?它需要4个字节?
难道一个短整型在C#中的文字...
你不能声明文字类型的短,所以问题是前途未卜。在实践中,C#编译器会像对待一个int(或长,如果足够大),很容易将其转换为字节或短期在适当情况下不进行强制转换。和抱怨当这种转换导致溢出。
它最终会像MOV或PUSH,处理器指令得到编码取决于你如何使用文字。一个实际的例子,使用Debug> Windows>系统Disasssembly窗口看看吧:
static void Main(string[] args) {
Console.WriteLine(12);
}
产生:
005B2DB0 B9 0C 00 00 00 mov ecx,0Ch
005B2DB5 E8 7E 38 BE 72 call 73196638
005B2DBA C3 ret
注意MOV指令及其产生的指令字节。 B9是“移动32位立即”指令,在接下来的4个字节是在little-endian顺序的值。以其他方式选择,因为所使用的的WriteLine(Int32)已超载C#编译器,它不具有用于字节或短重载。用同样的方法,看看您的特定代码会发生什么。
你不能声明short
数值文字。你只能申报类型数字文本int
,float
(f
suffix),double
(d
suffix),uint
(u
suffix),long
(l
suffix),ulong
(ul
suffix)和decimal
(m
suffix)。
所有的数字文字没有后缀,例如12
被推断为所述第一这些类型的,其中它们的值可被表示的组成:int
,uint
,long
,ulong
。因此,如果12
放入堆栈上,这将需要一个32位的系统上的4个字节。