在C#中使用byte/short等有什么原因吗?

7

对int类型感到不满意了吗?

很多代码都将int与double/float一起使用。

我知道有.NET移动版本,所以byte/short会被重用,但是对于桌面应用程序来说还有必要吗?

当我做C ++工作(游戏编程)时,我非常清楚我正在使用的每种数据类型,尽管我在C#/Java工作中没有这种感觉。

如果我知道我的循环永远不会超过byte的边界,那么使用byte会有什么好处吗?


因此,一般的答案是,对于一般用途 - 保持int,但对于大量数据(数组等),那么你至少应该考虑小数据类型? - Finglas
5个回答

10

相比于 long,一个单独的 byte 在内存方面不会造成很大的差异,但是当你开始有大型数组时,这额外的7个字节将产生很大的差异。

更重要的是,数据类型有助于更好地传达开发人员的意图:当你遇到一个 byte length; 时,你可以确定 length 的范围是 byte 的范围。


1
小问题:bytelong之间的差别是额外7个字节,而不是额外3个字节。 - Marc Gravell
糟糕,我的错。更何况,7字节已经非常大了! - Anton Gogolev

8
我认为这个问题想表达的是,10年前常见的做法是考虑变量需要存储什么值,例如,如果你要存储百分比(0..100),你可能会使用一个字节(-128到127有符号或0到255无符号),因为它足够大,因此被视为不浪费资源。

如今,这样的措施是不必要的。内存通常不是那么紧缺,如果真的很紧缺,你可能会被现代计算机在32位字边界(如果不是64位)上对齐的方式所限制。
除非你要存储成千上万个这样的数组,否则这些微小的优化现在已经是无关紧要的干扰。

老实说,我已经记不起上一次没有使用字节来存储原始数据了,我也想不起上一次使用short类型来存储任何东西了。

4
使用比CPU本地字长小的数据类型会导致一定的性能损失。当CPU需要将两个字节相加时,它们会被加载到32位的寄存器中,然后进行加法运算,接着对结果进行调整(去掉三个最高位字节,并计算进位/溢出),最后再存储回一个字节中。
这是很费力的工作。如果你要在循环中使用一个变量,请不要将其设置为小于CPU本地字长的大小。
这些数据类型存在的原因是为了处理包含它们的结构,因为有大小约束,或者因为有遗留的API等等。

3
这是一个“用正确的工具做正确的事情”的案例。如果你正在处理表示字节的内容,你需要使用byte数据类型。例如,许多涉及字节流的代码需要使用字节数组。相反,如果你只是处理任意整数,你可以使用intlong(如果它们比int能处理的更大)。

3

有很多原因使用byte - 处理原始二进制流的任何东西(图像、文件、序列化代码等)都必须用byte[]缓冲区来交互。

不过,我不会仅仅将byte用作计数器 - CPU可以更有效地处理int

至于short... 好吧,当你拥有一个它们的数组时,可能会节省相当多的空间,但通常我只会使用int


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接