代码之家  ›  专栏  ›  技术社区  ›  Jay

在设计或编码小尺寸交付物时需要考虑的要点

  •  0
  • Jay  · 技术社区  · 15 年前

    在为嵌入式系统设计或编码更小的可交付内存时,请张贴您应该记住的要点。

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

    4 回复  |  直到 15 年前
        1
  •  2
  •   Kornel Kisielewicz    15 年前

    这取决于你想降到多低。我目前正在为财政打印机编码,没有操作系统,主要规则是没有动态内存分配。有趣的是,我仍然说服全体船员编写完全现代的C++。

    实际上,我们决定了一些规则:

    • 无动态分配
    • 因此,没有STL
    • 无异常处理(明显原因)
        2
  •  1
  •   Aiden Bell    15 年前

    没有一个 一般答案 ,仅限于特定于语言/平台的…但是

    内存占用很小…

    1. 不要使用Java、C/M/O、PHP、Perl、Python或任何垃圾收集的东西
    2. 得到作为 尽可能靠近金属 使用C
    3. 如果您使用的是动态分配,请进行大量的分析以查看内存的分配位置。
    4. 确保你 防止堆碎片化 通过分配堆的合理块和大小
    5. 避免 递归函数 尤其是那些使用malloc()的。更好地分配块并传递指针。
    6. 使用For();
    7. 确保您的类型不超过要求
    8. 启用编译器优化

    会有更多的。

        3
  •  1
  •   Toad    15 年前

    对于真正的低占地面积,考虑直接进行装配。

    我们都知道,C或C++中的Hello World是20kb+(因为所有链接的默认库)。在装配过程中,这部分开销消失了。正如注释中指出的,可以大大减少标准库。但是,事实仍然是,当编码程序集比编译器从更高语言生成的代码密度高得多时,您可以得到代码密度。所以对于每个字节都重要的代码,使用汇编。

    另外,当在处理器性能较差的设备上编程时,用汇编语言编程可能是使程序足够快以便实时控制机器的唯一方法。

        4
  •  0
  •   jldupont    15 年前

    当面临这些限制时,建议 预分配内存 以确保系统在负载下工作。“对象池”等设计模式可用于共享系统内的资源。

    这个 C 语言支持严格的资源(即内存和计算周期)控制。应该认真考虑。

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

    推荐文章