【问题标题】:Any reason to use byte/short etc.. in C#?有什么理由在 C# 中使用字节/短等。
【发布时间】:2009-05-25 10:35:09
【问题描述】:

超过int类型?

很多代码要么将 int 与 double/floats 结合使用。

我知道有 .NET 移动版本之类的东西,所以字节/短代码各有千秋,但对于桌面应用程序有什么意义吗?

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

如果我知道我的循环永远不会超出字节的范围,那么我使用字节是否有任何好处?

【问题讨论】:

  • 所以一般的答案是,对于一般用途 - 坚持使用 int 但对于大量数据(数组等...),那么您至少应该考虑小型数据类型?

标签: c# java types


【解决方案1】:

单个bytelong 相比不会在内存方面产生巨大差异,但是当您开始使用大型数组时,这7 个额外字节会产生很大差异。

更重要的是,数据类型有助于更好地传达开发人员的意图:当您遇到byte length; 时,您肯定知道length 的范围是byte 的范围。

【讨论】:

  • minor: byte vs long 是 7 个额外字节,而不是 3 个额外字节。
  • 哎呀,我的错。更何况,7 个字节是巨大的!
【解决方案2】:

我认为这个问题的意思是,在 10 多年前,通常的做法是考虑变量需要存储什么值,例如,如果你存储一个百分比 (0..100),你可能使用一个字节(-128 到 127 有符号或 0 到 255 无符号),因为它对于工作来说足够大,因此被视为不那么“浪费”。

然而,这些天来,这些措施是不必要的。内存通常不是那么重要,如果是这样,您可能会被现代计算机在 32 位字边界(如果不是 64 位)上对齐事物所击败。

除非您要存储数千个这样的东西的数组,否则这些类型的微优化(现在)是无关紧要的干扰。

坦率地说,我不记得上次我没有将字节用于原始数据以外的其他内容,我想不起来我上次使用缩写是什么时候了。

【讨论】:

    【解决方案3】:

    使用小于 CPU 的本机字大小的数据类型时,性能会有所下降。当 CPU 需要将两个字节相加时,它会将它们加载到(32 位)字大小的寄存器中,相加,调整它们(切断三个最高有效字节,计算进位/溢出)并将它们存储回一个字节中。

    这是很多工作。如果要在循环中使用变量,请不要使其小于 CPU 的原生字。

    存在这些数据类型,因此代码可以处理包含它们的结构,因为大小限制,或者因为遗留 API 或其他原因。

    【讨论】:

      【解决方案4】:

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

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

      使用short...好吧,当你有一个 array 时,它可能会节省相当多的空间,但一般来说我只会使用int

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2013-12-03
          • 2011-03-19
          • 2012-01-18
          • 2011-10-12
          • 2010-09-23
          • 2015-11-08
          • 1970-01-01
          相关资源
          最近更新 更多