c-阵列封装效率:8位(字节)vs 16位元素



我目前正在用c为atmel(Atmega328)的8位微控制器编程。在程序中,我有一个8位数组,存储了数千个2位整数,因此它位于程序内存空间中。目前,我在每个字节中放入四个2位整数,但现在仔细想想,这似乎很愚蠢。。。

使用一个具有16位值的数组并在每个位置存储八个2位变量不是更有效吗?

微控制器(atmega328p)是一个8位IC,每个机器指令有16位。

如何提高效率?

空间效率

2位整数占用2位。你对此无能为力。

时间效率

无论你如何打包它们,你仍然需要执行相同数量的逐位运算,才能从较大的值中提取2位数字。

由于这是一个带有8位寄存器的8位处理器,因此在用汇编语言编程时,对16位操作数进行操作不会有所改善。但对于c编译器来说,情况就更复杂了。编译器完全有可能将8位操作数转换为执行16位算术的16位操作数,因为对于我所知道的几乎任何编译器来说,int大小通常至少为16位。

所以拆解才是真正的出路。

最新更新