精通COBOL--11.6.1 动态调用的基本概念

  动态调用发生的情况有两种。其中一种情况是使用CALL literal,并且程序被编译时使用DYNAMNODLL选项。另一种情况是使用CALL identifier,并且程序被编译时使用NODLL选项。并且,当使用CALL identifier时,即使使用了NODYNAM选项,仍然是动态调用。

与静态调用相对应,动态调用最基本的特征是主程序与子程序并不在同一加载模块中。动态调用中的子程序是在被调用时,才被读入内存的。关于程序的动态调用,主要有以下几点需要注意。

q      当多次进行动态调用时,每次调用的程序都为其最近一次被调用后的状态。这点同静态调用是类似的。但是,在动态调用中,可以通过CANCEL语句从内存中移除掉被调用程序。此时被调用程序仍然是存在的,只是其被分配的内存存储空间被释放掉了。因此,当下一次再调用该程序时,该程序将为最初的状态。

q      动态调用所占的存储空间相对较小。这一点实际上通常是使用动态调用最主要的原因。例如,假设某一主程序根据执行情况,将调用10~100个子程序。按照静态调用方式,将会把100个子程序全部存放到内存中。此时,如果该程序实际上仅调用了10个子程序,则这种方式显然是对内存空间的一种浪费。因此,这里通常应该使用动态调用方式,调用什么程序,就加载什么程序,动态地进行调用。

q      动态调用执行效率相对较慢。这是因为每次进行调用时,都要读写内存,所以增加了调用执行的时间。

阅读更多
文章标签: cobol 存储
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭