什么是减少C语言内存使用的最佳做法?

“Memory Efficient C programming”的一些最佳实践是什么? 大多数情况下,对于嵌入式/移动设备,低内存消耗应该是什么指导原则?

我想应该有单独的指导方针a)代码存储器b)数据存储器


在C中,在更简单的层面上,考虑以下内容;

  • 使用#pragma pack(1)以字节对齐您的结构
  • 在结构可以包含不同类型的数据的情况下使用联合
  • 使用位域而不是整数来存储标志和小整数
  • 避免使用固定长度的字符数组来存储字符串,实现字符串池并使用指针。
  • 在存储对枚举字符串列表的引用(例如字体名称)时,将索引存储到列表中而不是字符串中
  • 使用动态内存分配时,请提前计算所需元素的数量以避免重新分配。

  • 我发现了一些与嵌入式系统有关的建议:

  • 确保使用const实际声明任何查找表或其他常量数据。 如果使用const ,则数据可以存储在只读(例如,闪存或EEPROM)存储器中,否则数据必须在启动时复制到RAM,并且这占用了闪存和RAM空间。 设置链接器选项,以便它生成一个映射文件,并研究该文件以准确查看数据在内存映射中的分配位置。

  • 确保你正在使用所有可用的内存区域。 例如,微控制器通常具有您可以使用的板载内存(这可能比外部RAM更快)。 您应该能够使用编译器和链接器选项设置来控制分配了代码和数据的内存区域。

  • 为了减少代码大小,请检查编译器的优化设置。 大多数编译器都有开关来优化速度或代码大小。 可以尝试使用这些选项来查看是否可以减少编译代码的大小。 显然,尽可能消除重复的代码。

  • 检查系统需要多少堆栈内存并相应地调整链接器内存分配(请参阅此问题的答案)。 为了减少堆栈使用,避免将大型数据结构放在堆栈上(无论“大”的值与您有什么关系)。


  • 确保你在任何可能的地方使用定点/整数数学。 当简单的缩放整数数学就足够时,许多开发人员使用浮点数学(以及缓慢的性能和较大的库和内存使用情况)。

    链接地址: http://www.djcxy.com/p/39641.html

    上一篇: What are some best practices for reducing memory usage in C?

    下一篇: Optimization of importing modules in Python