Memory footprint 设计或编码占地面积较小的交付物时应考虑的要点
在为嵌入式系统设计或编码占地面积较小的可交付成果时,请发布应牢记的要点Memory footprint 设计或编码占地面积较小的交付物时应考虑的要点,memory-footprint,Memory Footprint,在为嵌入式系统设计或编码占地面积较小的可交付成果时,请发布应牢记的要点 我不提供编译器或平台的详细信息,因为我需要一般信息。但是,关于基于Linux的操作系统的任何特定信息也都是受欢迎的。取决于您希望获得的最低级别。我目前正在为财政打印机编码,没有操作系统,主要规则是没有动态内存分配。有趣的是,我仍然说服全体人员编写完全现代的C++;p> 实际上,我们决定了一些规则: 没有动态分配 因此,没有STL 无异常处理(明显原因) 取决于您想要达到的最低水平。我目前正在为财政打印机编码,没有操作系统,
我不提供编译器或平台的详细信息,因为我需要一般信息。但是,关于基于Linux的操作系统的任何特定信息也都是受欢迎的。取决于您希望获得的最低级别。我目前正在为财政打印机编码,没有操作系统,主要规则是没有动态内存分配。有趣的是,我仍然说服全体人员编写完全现代的C++;p> 实际上,我们决定了一些规则:
- 没有动态分配
- 因此,没有STL
- 无异常处理(明显原因)
- 没有动态分配
- 因此,没有STL
- 无异常处理(明显原因)
- 不要在垃圾收集中使用Java、C#/mono、PHP、Perl、Python或任何东西
- 尽可能靠近金属,使用C
- 如果您使用的是动态分配,请进行大量分析以查看内存分配的位置
- 确保通过分配合理的块和堆大小来防止堆碎片化
- 避免使用递归函数,尤其是使用malloc()的函数。最好分配块并传递指针
- 使用free();)李>
- 确保您的类型不超过要求
- 启用编译器优化
- 不要在垃圾收集中使用Java、C#/mono、PHP、Perl、Python或任何东西
- 尽可能靠近金属,使用C
- 如果您使用的是动态分配,请进行大量分析以查看内存分配的位置
- 确保通过分配合理的块和堆大小来防止堆碎片化
- 避免使用递归函数,尤其是使用malloc()的函数。最好分配块并传递指针
- 使用free();)李>
- 确保您的类型不超过要求
- 启用编译器优化
- 没有一个通用的答案,只有特定于语言/平台的答案。。。但是
内存占用小
还有更多。没有一般的答案,只有特定于语言/平台的答案。。。但是 内存占用小
对于实际的低足迹,考虑直接进行装配。
我们都知道,C或C++中的Hello World是20kb+(因为所有默认的链接库都是链接的)。在组装过程中,这种开销已经消失了。正如在评论中指出的,可以大大减少标准库。然而,事实仍然是,当编写汇编代码时,可以得到的代码密度远远高于编译器从更高级语言生成的代码密度。因此,对于每个字节都很重要的代码,使用汇编此外,在具有较低能力的处理器上编程时,汇编语言编程可能是使程序足够快以使其足够实时到(例如)控制机器
对于真正的低占用率直接考虑进行汇编的唯一途径。 我们都知道,C或C++中的Hello World是20kb+(因为所有默认的链接库都是链接的)。在组装过程中,这种开销已经消失了。正如在评论中指出的,可以大大减少标准库。然而,事实仍然是,当编写汇编代码时,可以得到的代码密度远远高于编译器从更高级语言生成的代码密度。因此,对于每个字节都很重要的代码,使用汇编
此外,当在处理器性能较差的设备上编程时,用汇编语言编程可能是唯一的方法,使程序速度足够快,以便在遇到此类限制时(例如)能够实时控制机器,建议预先分配内存,以确保系统在负载下工作。诸如“对象池”之类的设计模式可用于在系统内共享资源 C语言支持严格的资源(即内存和计算周期)控制。应该予以认真考虑
避免递归,因为它容易被滥用,并可能导致堆栈溢出情况。当面临此类约束时,建议预先分配内存,以确保系统在负载下工作。诸如“对象池”之类的设计模式可用于在系统内共享资源 C语言支持严格的资源(即内存和计算周期)控制。应该予以认真考虑
避免递归,因为它很容易被滥用,并可能导致堆栈溢出情况。在每个人开始向下投票之前。Arm汇编非常容易学习,并且比X86干净得多(这是编程的噩梦)。现在很多嵌入式系统(电话/手持设备等)都使用arm。网络上也有很多很好的资源,除了你不会在嵌入式设备上做Hello,World;您可以使用内存映射I/O或任何现有的接口库(可能是用汇编语言编写的)不会有库膨胀。+1用于先发制人地阻止向下投票,而且你是对的,汇编不必太严肃。@david:你从编译器那里假设了很多,这不是提问者给出的答案