我目前正在为 atmel (Atmega328) 的 8 位微控制器编写 c 语言。在程序中,我有一个存储数千个 2 位整数的 8 位数组,因此它位于程序存储空间中。目前,我在每个字节中放置了四个 2 位整数,但现在当我更仔细地考虑它时,它似乎很愚蠢......
使用具有 16 位值的数组并在每个位置存储八个 2 位变量不是更有效吗?
微控制器 (atmega328p) 是一个 8 位 IC,每个机器指令有 16 位。
由于这是一个带有 8 位寄存器的 8 位处理器,因此在用汇编语言编程时,它不会改善对 16 位操作数的操作。但是对于 c 编译器来说,事情要复杂得多。编译器绝对有可能将 8 位操作数转换为执行 16 位算术的 16 位操作数,因为对于我所知道的几乎所有编译器,int 大小通常至少为 16 位。
所以拆机才是真正的出路。
怎样才能更有效率?
2 位整数占用 2 位。您对此无能为力。
无论您如何打包它们,您仍然需要执行相同数量的按位运算来从较大的值中提取您的 2 位数字。