【问题标题】:Are "char" and "small int" slower than "int"? [duplicate]“char”和“small int”比“int”慢吗? [复制]
【发布时间】:2011-07-17 20:25:22
【问题描述】:

可能重复:
Performance of built-in types : char vs short vs int vs. float vs. double

嗨。假设您有 32 位 处理器。 8 位 char 和 16 位 short int 类型是否比原生 32 位 int 慢? 使用 64 位 long long int 怎么样?

这些数据类型是硬件默认支持的,还是全部通过附加指令转换成 32 位数据?

如果我必须存储少量字符,将它们存储为整数不是更快吗?

【问题讨论】:

  • 如果您要存储少量字符,为什么还要为潜在的纳秒差异而烦恼?
  • @Erik:一个变量可以被使用数百万次。你的论点不成立。
  • @R.:对字符使用更广泛的类型可能会增加缓存未命中率。除非分析器证明不是这样,否则毫无意义的优化。
  • CPU 将最近使用的内存位置保存在“快速 RAM”中,此 RAM 是慢得多的主内存的缓存。
  • 优化很重要,学习如何以最快的方式做事是一件好事! .请停止过早的悲观化。

标签: c++ c compiler-construction processor


【解决方案1】:

这取决于指令集中的操作以及编译器。

【讨论】:

    【解决方案2】:

    在任何现代实用的机器上,charintlong 都会很快(可能同样快)。 short 是否快在 cpu 架构之间,甚至在单个架构中的不同 cpu 模型之间有所不同。

    话虽如此,对于单个变量使用小类型确实没有充分的理由,不管它们的速度如何。它们的语义令人困惑(由于int 的默认促销),它们不会为您节省大量空间(甚至可能没有任何空间)。我唯一一次使用charshortint8_tint16_t 等是在数组或结构中,它们必须与固定的二进制布局相匹配,你将拥有这么多的位置(例如像素或音频样本),每个像素的大小实际上很重要。

    【讨论】:

    • 真的吗?例如,您会使用 int 作为布尔值而不是带符号的字符?
    • 当然。它不仅可以生成更小、更快的代码;它也更惯用。所有返回真值的标准 C 函数都使用 int 作为其返回类型,并且 C 中所有比较/布尔运算符的值的类型为 int
    • 我太偏向于极简设计,以至于认为这是正确的。哈哈。从现在开始我会尝试使用它。
    • @Spidey:我建议不要使用int,您的意思是boolchar。使用你需要的类型。
    • 还要注意签名可能很重要。例如,Arm 很长一段时间以来都有字节的快速“加载和零扩展”指令,但对字节的快速“加载和符号扩展”的支持仅在更高版本中添加,并且具有更多限制性寻址。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多