适用于没有动态内存分配的开发的语言

时间:2013-06-06 15:01:02

标签: memory-management embedded heap

除了C和C ++之外,是否有任何语言都可以在没有动态内存分配(即堆)功能的情况下显式使用。在某些关键任务嵌入式系统中,禁止使用堆来消除可能连续运行多年的软件的内存泄漏问题。某些专用编译器还明确禁用newmalloc来强制执行此操作。

我已经研究了一些函数式语言,即TimberErlang,因为它们的嵌入式重点,但两者似乎都使用垃圾收集器。尽管静态类型化,OCamlHaskell也使用垃圾收集器,显然Python,Ruby和其他动态类型语言在很大程度上依赖于垃圾收集和堆空间。

  • 任何高级语言是否支持不动态分配内存的这一要求?
  • 对于功能静态类型语言的编译器来说,这是否可以根据语言语义来实现呢?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:-3)

程序本质上是数据结构及其使用合适算法的操作。数据必须保存在某处的内存中。它可以位于全局,堆栈或堆内存中。

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

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

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

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

如果设计精良,设计精良且经过良好测试,那么它应该做好应该做的一切,不要做任何不应该做的事情。

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