c - 定义数百个双常量的最节省内存的方法

标签 c embedded

在嵌入式 C 程序中定义数百个 double (64 位浮点)常量的最节省内存的方法是什么?请注意此应用程序内存受限,我需要尽可能多地节省 RAM。

这是一个带有 2048B RAM 的 Atmel AVR,主频为 8MHz。 32K 闪存。

最佳答案

在很大程度上,让常量不使用内存的方法是将它们存储在一个文件中,并在需要时读取它们。

如果您不能这样做,那么常量必须构成程序的一部分,并且它们将以一种或另一种方式占用内存,要么在数据段中,要么作为指令中的立即数。

如果不需要全精度,您可以将数据减少为 float 而不是 double

一些处理器架构提供在指令中编码简单的浮点常量。如果您的目标是这样的处理器,您应该研究它的文档以了解支持哪些常量。这不太可能对一般数据有用。

如果数据具有某种模式,您可以使用它来生成运行时所需的部件。 (这包括各种形式的压缩和解压缩,这取决于数据中的模式。)显然,这取决于数据的性质,您没有包含在您的问题中。

另一种应该考虑的可能性是您的程序是否需要它使用的所有原始数据,或者是否可以提前执行部分工作以减少所需的数据。

否则,总的来说,数据就是数据,它占用它占用的空间。

关于c - 定义数百个双常量的最节省内存的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21827092/

相关文章:

c - 用另一个数组初始化结构中的数组

c - 在 C 中使用数据包模式时如何绑定(bind)到默认接口(interface)?

c - 在特定核心/线程上运行代码?

c - 在嵌入式中取消引用 NULL 指针

c - 我应该互斥锁定单个变量吗?

embedded - 将ADC档转换为电压

c - uint8_t * const LCDMem = (uint8_t *) &LCDM3;意义

c - 在函数参数中使用 union

c++ - Arduino 如何存储最后一个 IR 代码以检查它是否需要重复?

linux - 为什么 Qt 无法在我的新硬件上初始化显示