16 到 32 位整数转换与性能

16 to 32 bit integer conversion vs performance

我想从数组中加载 16 位无符号整数,并将这些值用于 C++ 中的 32 位无符号计算。我可以选择将值存储为 16 位数组(更少内存)或 32 位数组(更多内存消耗)。

我的代码应该可以用常见的 C++ 编译器编译,并且 运行 可以在尽可能多的体系结构上编译。很多这样的组合很难做性能测量和汇编代码阅读,所以我要求理论考试。

换句话说:16 位到 32 位无符号整数的转换通常在什么条件下消耗 CPU 个周期?我什么时候可以使用内存减少的 16 位数组而不丢失 CPU 个周期?

我认为所有主要架构都支持从带符号扩展和零扩展的内存加载。 x86、ARM 和 MIPS 肯定有这样的加载指令。旧架构和原始微控制器,尤其是 8 位和 16 位微控制器,可能没有这样的指令,因此可能需要多条指令才能获得相同的结果。如果你没有提到这些,你可能并不真正关心。所以,只需编写可移植的 C/C++ 代码并完成它。