位操作会导致程序运行得更慢吗?

fla*_*nik 5 c++ performance storage bit-manipulation

我正在处理需要处理大量数据的问题.目前,其值表示为unsigned int.我知道真正的价值不超过限制1000.

问题

  1. 我可以unsigned short用来存储它.这样做的好处是它将使用更少的存储空间来存储该值.性能会受损吗?

  2. 如果我决定将数据存储为short但所有调用函数都使用int,则会认识到在存储或提取值时我需要在这些数据类型之间进行转换.性能会受损吗?性能损失是否会引人注目?

  3. 如果我决定不使用short,只有10位打包成一个数组unsigned int.与以前相比,这种情况会发生什么?

dou*_*lep 10

这一切都取决于架构.位字段通常较慢,但如果您能够显着降低内存使用率,您甚至可以通过更好的CPU缓存和类似的东西获得性能.同样简短(尽管在任何情况下都不是戏剧性的).

最好的方法是使源代码能够轻松切换表示(当然,在编译时).然后,您将能够在您的具体情况下测试和分析不同的实现,例如更改一个#define.

另外,不要忘记过早优化规则.让它先工作.如果结果很慢/不够快,那么只能尝试加速.

  • +1用于警告不要过早优化 (7认同)