在设计或编码较少的足迹可交付成果时要考虑的要点

时间:2010-01-19 16:09:14

标签: memory-footprint

请在设计或编码嵌入式系统的较少封装可交付成果时,记住要记住的要点。

我不提供编译器或平台详细信息,因为我需要通用信息。但是,也欢迎基于Linux的操作系统的任何具体信息。

4 个答案:

答案 0 :(得分:2)

取决于你想要多少。我目前正在为财务打印机编码,并且没有操作系统,主要规则是没有动态内存分配。有趣的是,我仍然说服工作人员编写完全现代的C ++代码;)。

实际上我们决定采用一些规则:

  • 无动态分配
  • 因此,没有STL
  • 无异常处理(显而易见的原因)

答案 1 :(得分:1)

没有一般性答案,只有特定于语言/平台的内容......但

内存占用量小......

  1. 不要使用Java,C#/ mono,PHP,Perl,Python或任何垃圾回收
  2. 尽可能接近金属,使用C
  3. 如果您正在使用动态分配
  4. ,请进行大量分析以查看内存分配的位置
  5. 通过分配合理的块和堆大小,确保防止堆碎片
  6. 避免递归函数,特别是那些使用malloc()的函数。更好地分配一个块并传递一个指针。
  7. 使用free();)
  8. 确保您的类型不超过要求
  9. 启用编译器优化
  10. 会有更多。

答案 2 :(得分:1)

对于真正的低占用空间,请考虑直接进行装配。

我们都知道C或C ++中的Hello World是20kb +(因为链接的所有默认库)。在装配中,这种开销消失了。正如评论中指出的那样,可以相当多地减少标准库。但是,事实仍然是编码汇编时可以获得的代码密度远高于编译器从高级语言生成的代码密度。因此,对于每个字节都很重要的代码,请使用汇编。

当在具有较低能力的处理器的设备上进行编程时,使用汇编语言编程可能是使程序足够快以使其足够实时(例如)控制机器的唯一方法

答案 3 :(得分:0)

当遇到这些限制时,建议预先分配内存,以保证系统在负载下工作。诸如“对象池”之类的设计模式可用于在系统内共享资源。

C 语言可实现严格的资源(即内存和计算周期)控制。应该强烈考虑。

避免递归,因为它很容易滥用,并可能导致堆栈溢出情况。