Gor*_*pik 50
这是一个记忆对齐的问题.4字节变量的工作速度比2字节变量快.这就是为什么你应该使用int而不是字节或短的计数器等.
只有当内存比速度更重要时,才应使用2字节变量.这就是为什么char(在.NET中是Unicode)占用两个字节而不是四个字节的原因.
Bla*_*ade 17
关于 boolean
大多数其他答案都是错误的 - 对齐和速度是程序员应该坚持使用int for循环计数器的原因,而不是为什么编译器可以使一个字节为4字节宽.事实上,所有的推理都适用于字节和短路以及布尔值.
至少在C#中,bool(或System.Boolean)是一个1字节宽的内置结构,可以自动装箱,所以你有一个对象(至少需要两个记忆词,即8 /分别在32/64位环境上的16个字节),其中一个字段(至少一个字节)加上一个指向它的存储器字,即总共至少13/25字节.
这确实是"C#原始类型"的第一个Google条目. http://msdn.microsoft.com/en-us/library/ms228360(VS.80).aspx
此外,引用的链接(http://geekswithblogs.net/cwilliams/archive/2005/09/18/54271.aspx)还指出,CLI标准的布尔值占用1个字节.
然而,实际上,唯一可以看到它的地方是布尔数组 - 布尔值将占用n个字节.在其他情况下,一个布尔值可能需要4个字节.
关于 char
char是两个字节,因为当需要支持国际化时,在内部使用双字节字符是最安全的选择.这与选择支持Unicode无关,而是与坚持UTF-16和基本多语言平面的选择无关.在Java和C#中,您可以假设一个逻辑char适合char类型的变量.
这是因为在32位环境中,CPU可以比8位或16位值更快地处理32位值,因此这是速度/大小权衡.如果你必须节省内存并且你有大量的bool,只需使用uint并将你的布尔值保存为4字节uint的位.字符宽度为2个字节,因为它们存储16位Unicode字符.