C:在每个位都很重要的情况下存储变量的最有效方法

时间:2016-10-29 12:41:40

标签: c performance storage

首先:这可能是重复的,但在谷歌上搜索后,我似乎无法找到这个问题的明确答案。

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

我想存储8位的倍数(例如:48位)。我的第一个想法是使用长度为6且类型为uint8_t的数组,但我不知道如何将高效数组与其他类型进行比较。有些人说指针更有效率,而其他人说它并不重要,但我无法找到关于真实少量内存的案例的明确答案。最后一个问题:我知道发送位的大小永远不会超过64位,所以如果我只是总是使用uint64_t那么重要吗?

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

EDIT2: 我的意思是具有不同的大小:大小是在编译时确定的,而不是在运行程序时确定的。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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