古代世界中的子程序调用,在计算机拥有堆栈或堆之前 - 《旧新事物》

主要观点:如今栈和堆被视为理所当然,但早期计算机无此概念,可通过固定大小内存缓冲区实现计算,无栈时通过特殊方式调用函数和处理局部变量,如编译器定义秘密全局变量来模拟栈操作,可优化 ABI 但不能递归,早期编程语言不支持递归,一些编译器甚至使用自修改代码,后来许多处理器添加了子例程调用指令来实现类似栈的功能,如 FORTRAN 起初不支持子例程,直到 1991 年才支持递归且需显式声明。
关键信息:早期计算无栈和堆,用固定大小内存缓冲区;编译器定义秘密全局变量模拟栈操作;优化 ABI 可通过寄存器传递值;递归因会覆盖返回地址变量而不可行;早期编程语言不支持递归;一些编译器用自修改代码;后来处理器添加子例程调用指令。
重要细节:如代码示例中函数调用和返回的具体实现方式,不同处理器的相关特性等。

阅读 22
0 条评论