9

除了 C 和 C++ 之外,是否还有其他语言可以在没有动态内存分配(即堆)特性的情况下显式使用。在一些关键任务嵌入式系统中,禁止使用堆来消除可能连续运行多年的软件的内存泄漏问题。一些特殊用途的编译器也明确禁用newmalloc强制执行这种做法。

我查看了一些函数式语言,即TimberErlang的嵌入式重点,但它们似乎都使用带有垃圾收集器的堆。 尽管静态类型, OCamlHaskell也使用垃圾收集器,显然 Python、Ruby 和其他动态类型语言严重依赖垃圾收集和堆空间。

  • 是否有任何高级语言支持这种不动态分配内存的要求?
  • 考虑到它们的语言语义,功能性静态类型语言的编译器是否有可能这样做?
4

2 回答 2

1

你可以看看ADA。几年前我一直在嵌入式平台上使用 ADA83。它根本不需要动态分配,它和 C 一样高级(在我看来,它甚至比 C 更好)。当然,问题是为您的平台获取 ADA 编译器。也许GNAT会为你工作。

于 2013-06-10T12:15:25.010 回答
-4

程序本质上是数据结构及其通过使用合适的算法进行的操作。数据必须保存在内存中的某个地方。它可以在全局、堆栈或堆内存中。

仅仅因为不使用堆并不能保证全局或堆栈不会被错误代码破坏。

如果一个系统设计得很好,那么它应该具有执行所需功能所需的所有必要资源,即 cpu、内存、操作系统、带宽、电源、冷却等。

可以通过管理全局内存而不是堆内存来实现,但这会使许多使用指针的库变得无用。

我认为最好的方法是保持简单,在运行/调试时获得系统的大量动态可见性,并确保在宣布适合部署之前彻底执行单元测试、代码覆盖测试和系统边界测试。

如果它设计得很好,设计得很好并且经过了很好的测试,那么它应该做好它应该做的所有事情,而不做任何它不应该做的事情。

有些编译语言没有指针,例如 Fortran,但我不知道有任何嵌入式系统专门使用 Fortran 来实现系统。

于 2013-06-08T04:55:32.127 回答