程序中的现场保护和现场恢复

我对这个也不是了解的很深,在学,先记一笔。

现场保护和现场恢复概念来源于汇编中主程序和子程序之间的调用和返回。和CPU中断机制有关。

主程序和子程序通常是分别编制的,所以它们所使用的寄存器往往会发生冲突。如果主程序在调用子程序之前的某个寄存器内容在从子程序返回后还有用,而子程序又恰好使用了同一个寄存器,这就破坏了该寄存器的原有内容,因而造成程序运行错误,这是不允许的。为避免这种错误的发生,在一进入子程序后,就应该把子程序所需要使用的寄存器内容保存在堆栈中,此过程称作现场保护。在退出子程序前把寄存器内容恢复原状,此过程称作现场恢复。现场保护与现场恢复分别使用压栈和弹出指令实现。

而在高级编程语言C、C++中与这个类似,虽然不用直接操作寄存器,但是在函数调用过程中对堆栈、静态变量操作也要注意。

C语言中把变量存储在三个地方:
静态存储区:保存自动全局变量和static变量(包括static全局和局部变量)。静态区的内容在整个程序的声明周期内都存在,由编译器在编译的时候分配。
栈:保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。
堆:由程序员手工分配(类似malloc函数),释放的内存(类似free函数)。在没释放之前一直存在,直到程序结束。
堆栈在内存的动态存储区。

在程序中如果临时变量、全局变量在其它地方调用或函数调用回来后修改过了,回到当前位置根据需要要恢复成原来的值。

嗯 暂时这样吧。