除了C和C ++之外,是否有任何语言都可以在没有动态内存分配(即堆)功能的情况下显式使用。在某些关键任务嵌入式系统中,禁止使用堆来消除可能连续运行多年的软件的内存泄漏问题。某些专用编译器还明确禁用new
和malloc
来强制执行此操作。
我已经研究了一些函数式语言,即Timber和Erlang,因为它们的嵌入式重点,但两者似乎都使用垃圾收集器。尽管静态类型化,OCaml和Haskell也使用垃圾收集器,显然Python,Ruby和其他动态类型语言在很大程度上依赖于垃圾收集和堆空间。
答案 0 :(得分:1)
你可以看看ADA。几年前我一直在嵌入式平台上使用ADA83。它根本不需要动态分配,它与C一样高(在我看来,它甚至比C更好)。当然,问题是为您的平台获取ADA编译器。也许GNAT会对你有用。
答案 1 :(得分:-3)
程序本质上是数据结构及其使用合适算法的操作。数据必须保存在某处的内存中。它可以位于全局,堆栈或堆内存中。
仅仅因为未使用堆不能保证全局或堆栈不会被错误的代码破坏。
如果系统设计得很好,那么它应该具备所需的所有必要资源,即CPU,内存,操作系统,带宽,功率,冷却等,以执行所需的功能。
可以通过管理全局内存而不是堆内存来实现,但这会使很多使用指针的库变得无用。
我认为最好的方法是保持简单,在运行/调试时获得对系统的大量动态可见性,并确保在声明适合部署之前彻底执行单元测试,代码覆盖率测试和系统边界测试。
如果设计精良,设计精良且经过良好测试,那么它应该做好应该做的一切,不要做任何不应该做的事情。
有些编译语言没有指针,例如Fortran,但我不知道任何使用Fortran专门实现系统的嵌入式系统。