Memory management 适合无需动态内存分配的开发语言 除了C和C++之外,还有其他语言可以显式地使用,而不需要动态内存分配(即堆)特性。在一些任务关键型嵌入式系统中,禁止使用堆来消除可能连续运行多年的软件的内存泄漏问题。一些专用编译器还显式禁用new和malloc,以强制执行此操作

Memory management 适合无需动态内存分配的开发语言 除了C和C++之外,还有其他语言可以显式地使用,而不需要动态内存分配(即堆)特性。在一些任务关键型嵌入式系统中,禁止使用堆来消除可能连续运行多年的软件的内存泄漏问题。一些专用编译器还显式禁用new和malloc,以强制执行此操作,memory-management,embedded,heap,Memory Management,Embedded,Heap,我已经研究了一些函数式语言,即和,它们的嵌入式强调,但它们似乎都使用带有垃圾收集器的堆。尽管静态类型是静态的,但仍然使用垃圾收集器,显然Python、Ruby和其他动态类型语言严重依赖垃圾收集和堆空间 是否有高级语言支持不动态分配内存的要求? 在给定语言语义的情况下,函数静态类型语言的编译器甚至可以这样做吗 程序本质上是数据结构及其使用适当算法的操作。数据必须保存在内存中的某个地方。它可以在全局内存、堆栈内存或堆内存中 仅仅因为不使用heap并不能保证全局或堆栈不会被坏代码破坏 如果一个系统设

我已经研究了一些函数式语言,即和,它们的嵌入式强调,但它们似乎都使用带有垃圾收集器的堆。尽管静态类型是静态的,但仍然使用垃圾收集器,显然Python、Ruby和其他动态类型语言严重依赖垃圾收集和堆空间

  • 是否有高级语言支持不动态分配内存的要求?
  • 在给定语言语义的情况下,函数静态类型语言的编译器甚至可以这样做吗

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

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

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

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

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

如果它设计得好,设计得好,测试得好,那么它应该做好它应该做的一切,而不是做它不应该做的任何事情


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

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

这似乎不是基于对问题中的问题的理解,也不是基于对所述概念之间差异的理解。例如,指针并不意味着动态分配。此外,即使系统没有内存泄漏——堆内存可能会因堆碎片而意外耗尽,特别是在连续运行多年的受限系统中……我不是在寻找管理内存分配的不同方法,但我要寻找的是一种语言,它可以编译成纯静态分配的内存,并带有用于函数调用的堆栈。因此,在西尔万看来,分裂是不可能的。应该在编译时完全分配内存,并保留一些堆栈空间。是的,但要注意,如果您的程序是由操作系统加载的,则编译器所做的“分配”仍必须由操作系统动态实现(作为块)。如果你正在编写一个裸露的金属程序,或者你所用的任何一个内核都已经做了静态内存预留,那么实现编译器(和链接器)所编码的任何东西都是一个更加确定的过程。我会考虑C++模板非常高的级别(例如,它可以在模板中编译)。但它比其他语言要难得多。你认为是高级语言吗?我想找到比“四”更高级的东西。我知道C++模板,但我一直觉得模板元编程更像是一种发现语言,而不是一种有意使用的用例。动态分配有点不当。也就是说,仅仅禁止
malloc
new
是不够的。它们只是其他功能。使用Java或更具体地说是垃圾收集,您可以有非故意的引用。类似于
alloca()
的东西允许从堆栈进行运行时分配,就像C/C++一样。即使这样也可能被禁止,因为您对动态内存的定义可能与其他定义不同。我相信您需要预先确定编译时最大内存使用量的东西。和。另一个需要考虑的是时间,我发现到目前为止,Ada似乎是满足这一特定需求的最佳语言。