此问题与C#程序的物理内存有关。我们知道,byte
变量占用1个字节的内存,另一方面int
(32位)变量占用4个字节的内存。因此,当我们需要具有可能较小值的变量(例如计数器变量i
来迭代循环100次)时,我们应该在下面的for循环中使用哪一个? byte
或int
?
for(byte i=0; i<100; ++i)
请您理智地说出您的意见并分享您宝贵的知识。我将很高兴并感谢你:-)
注意:在这种情况下,我使用byte
而不是int。但我已经看到,即使预期值小于255,许多有经验的程序员也会使用int
。如果我错了,请告诉我。 : - )
答案 0 :(得分:3)
在大多数情况下,使用byte
代替int
您无法获得任何好处。原因是:
如果循环变量存储在CPU寄存器中:由于现代CPU的寄存器宽度为32位,并且由于您不能仅使用寄存器的四分之一,因此生成的代码几乎都是相同的。
如果循环变量没有存储在CPU寄存器中,那么它很可能存储在堆栈中。编译器尝试在4的倍数的地址处对齐存储器位置,这与性能有关,因此编译器还会为堆栈上的字节变量分配4个字节。
根据代码的细节,编译器甚至会添加额外的代码以确保内存位置(在堆栈或寄存器中)永远不会超过255,这会增加额外的代码并使其变慢。 与Atmel和Microchip的8位微控制器完全不同,你的方法很有意义。