C:在每一位都很重要的地方存储变量的最有效方法

C: Most efficient way to store variables where every bit matters

首先:这可能是重复的,但在 google.

上搜索后,我似乎无法找到关于这个问题的明确答案

对于一个项目,我正在设计一个使 2 个 ATMega328p 芯片进行通信的脚本。目前我正在测试执行此操作的最佳速度,但我的目标是实现非常高的波特率。我在提高代码效率方面有丰富的经验,但在内存管理部分却没有。问题:

我想存储 8 位的倍数(例如:48 位)。我的第一个想法是使用长度为 6 且类型为 uint8_t 的数组,但我不知道数组与其他类型相比效率如何。有些人说指针效率更高,而另一些人则说这无关紧要,但我找不到关于内存量非常小的情况的明确答案。最后一个问题:我知道发送的位的大小永远不会超过 64 位,所以如果我只是 Always jused uint64_t?

有什么关系吗?

编辑: 澄清:我的目标是最小化存储大小,而不是传输大小

编辑2: 我所说的大小不同是什么意思:大小取决于编译时,而不是 运行 程序时。

如果您的包的长度可能会有所不同,最有效的方法是在通信之前压缩包。

例如每个包的前 3 位,可以确定该包的大小。

压缩包通信速度更快,占用内存更少space。

ATmega328p 是一个 8 位处理器。它的所有指令都是8位的。没有什么比简单地拥有一个 uint8_t 数组更快。

你可以做的是,当你编译时,查看你的 .lss 文件,它会显示汇编代码,然后你可以查看 AVR 指令集并查看每个指令需要的时钟周期。我认为您会发现使用 uint64_t 只会增加不必要的开销,除非您对将字节放入其中的方式非常小心。