Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory footprint 设计或编码占地面积较小的交付物时应考虑的要点_Memory Footprint - Fatal编程技术网

Memory footprint 设计或编码占地面积较小的交付物时应考虑的要点

Memory footprint 设计或编码占地面积较小的交付物时应考虑的要点,memory-footprint,Memory Footprint,在为嵌入式系统设计或编码占地面积较小的可交付成果时,请发布应牢记的要点 我不提供编译器或平台的详细信息,因为我需要一般信息。但是,关于基于Linux的操作系统的任何特定信息也都是受欢迎的。取决于您希望获得的最低级别。我目前正在为财政打印机编码,没有操作系统,主要规则是没有动态内存分配。有趣的是,我仍然说服全体人员编写完全现代的C++;p> 实际上,我们决定了一些规则: 没有动态分配 因此,没有STL 无异常处理(明显原因) 取决于您想要达到的最低水平。我目前正在为财政打印机编码,没有操作系统,

在为嵌入式系统设计或编码占地面积较小的可交付成果时,请发布应牢记的要点


我不提供编译器或平台的详细信息,因为我需要一般信息。但是,关于基于Linux的操作系统的任何特定信息也都是受欢迎的。

取决于您希望获得的最低级别。我目前正在为财政打印机编码,没有操作系统,主要规则是没有动态内存分配。有趣的是,我仍然说服全体人员编写完全现代的C++;p> 实际上,我们决定了一些规则:

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

取决于您想要达到的最低水平。我目前正在为财政打印机编码,没有操作系统,主要规则是没有动态内存分配。有趣的是,我仍然说服全体人员编写完全现代的C++;p> 实际上,我们决定了一些规则:

  • 没有动态分配
  • 因此,没有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:你从编译器那里假设了很多,这不是提问者给出的答案