Answers:
你是对的。但是基于堆栈的内容只是整个故事的一部分。例如,Java字节码解释器也基于堆栈(出于效率原因,编译后的代码会有所不同)。这告诉我们,任何语言都可以转换为堆栈语言。
重要的是堆栈外部的对象,那些对象的寿命可能超过当前方法的执行时间。只要语言没有类似malloc
或的语言new
,就没有此类对象,并且您不需要delete
也不 GC。
缺乏动态内存分配的语言的用途非常有限。
如果语言使用静态分配而不是堆栈分配,则不需要垃圾回收。例如,带有-s(静态存储)选项的Fortran 77 在程序启动时分配所有内存,因此在运行时不会发生要释放的内存分配。尽管需要一些纪律,但可以编写程序,尤其是模拟程序以使用静态内存分配。静态分配消除了任何内存泄漏,并提高了缓存性能,因为编译器可以使用静态分析来确定要加载到缓存中的内容。