C++ 如何重置已保存变量的模块的状态,以便为下一次调用做好准备?

C++ 如何重置已保存变量的模块的状态,以便为下一次调用做好准备?,c++,scope,fortran,C++,Scope,Fortran,Fortran项目中的模块通过保存的变量交换数据。即使我不喜欢这个设计,它也很好用 现在,我必须在C++循环中调用子程序。问题是没有办法在每次调用时重置程序的状态。被调用的Fortran子例程保留来自上一次调用的信息 不包括Fortran代码的重写,因为保存的变量太多,而且看起来很有条理,我如何从C++中逐次调用这些变量,以便每个调用都像一个新的新的?< /P> < P>,你可以通过关闭共享库并重新打开一个模块来重置一个模块。如果你做得太频繁,会很慢。它比普通的共享库链接更复杂,因为库必须在运行

Fortran项目中的模块通过保存的变量交换数据。即使我不喜欢这个设计,它也很好用

现在,我必须在C++循环中调用子程序。问题是没有办法在每次调用时重置程序的状态。被调用的Fortran子例程保留来自上一次调用的信息


不包括Fortran代码的重写,因为保存的变量太多,而且看起来很有条理,我如何从C++中逐次调用这些变量,以便每个调用都像一个新的新的?< /P> < P>,你可以通过关闭共享库并重新打开一个模块来重置一个模块。如果你做得太频繁,会很慢。它比普通的共享库链接更复杂,因为库必须在运行时加载和卸载。请参阅一个示例,其中从Linux中的.so共享库卸载并再次加载模块。这个例子调用C中的代码> DLOPEN/COD>和DLCONT/<代码>,也可以从C++调用(使用Fortran的一些接口)。

< P>可以通过关闭共享库并重新打开模块来重置模块。如果你做得太频繁,会很慢。它比普通的共享库链接更复杂,因为库必须在运行时加载和卸载。请参阅一个示例,其中从Linux中的.so共享库卸载并再次加载模块。这个例子调用C中的代码> dLOpen/<代码>和 DLCONT/<代码>,也可以从C++调用它(甚至有FORTRAN的接口)。这是一个dll、一个静态库,还是在另一个进程中运行?您的应用程序在什么操作系统下运行?是否为模块变量定义了初始值?可以关闭并再次打开dynamic.so库,但速度很慢。我在(GNU)Linux x86_64下运行,Fortran代码的前端是我目录中的一个文件,其余的在共享库中。是的,我希望在每次调用中使用初始值,而不是更新后的值。我正在为所有保存的变量寻找类似“全局销毁程序/初始化程序”的东西。根据我的经验,在每个子例程的开头将所有局部变量“初始化”为默认值是相当标准的。这就是你所需要的吗?另外,请注意一个常见的Fortran“gotcha”是声明变量,如
integer::val=0
,只在第一次初始化它,然后它们有一个隐式的
save
。我仍然没有找到解决此问题的方法。至少,有什么技巧可以用来比较两个调用之间的内存状态吗?第一步是清点未初始化的保存变量。FORTRAN模块的性质是什么?这是一个dll、一个静态库,还是在另一个进程中运行?您的应用程序在什么操作系统下运行?是否为模块变量定义了初始值?可以关闭并再次打开dynamic.so库,但速度很慢。我在(GNU)Linux x86_64下运行,Fortran代码的前端是我目录中的一个文件,其余的在共享库中。是的,我希望在每次调用中使用初始值,而不是更新后的值。我正在为所有保存的变量寻找类似“全局销毁程序/初始化程序”的东西。根据我的经验,在每个子例程的开头将所有局部变量“初始化”为默认值是相当标准的。这就是你所需要的吗?另外,请注意一个常见的Fortran“gotcha”是声明变量,如
integer::val=0
,只在第一次初始化它,然后它们有一个隐式的
save
。我仍然没有找到解决此问题的方法。至少,有什么技巧可以用来比较两个调用之间的内存状态吗?第一步是清点未初始化的已保存变量。