我有一个进行模拟的c ++程序。模拟很大。它需要运行几次。
我可能没有考虑一些内存管理指南,例如通过引用函数传递参数以避免相同数据的副本浪费内存,以及其他我甚至不知道的技术。但重新整理整个程序为时已晚(或者甚至可能无法帮助)。
我有一个程序
void main(){
//Simulation consuming a lot of memory.
};
我想要像
这样的东西void main(){
for (int i=0;i<10000;i++){
//Simulation consuming a lot of memory (depending on i).
};
};
但是以这种方式在 for 的每个循环之后释放内部使用的内存(可能除了用于程序和for的计数器i之外)。
对于循环的一次重复,内存保持良好,但对于两次循环没有。
我有办法做到这一点吗?
答案 0 :(得分:1)
在 UNIX / Linux 上,您可以创建一个bash shell脚本来调用您的C ++程序所需的次数,例如run_my_app.sh
,其中包含以下内容:
i=0
while (( $i < 10000 )); do
./my_app $i
let i+=1
done
然后使用chmod +x run_my_app.sh
使其可执行。
在 Windows 上,对cmd.exe
“shell”执行相同的操作,使用以下内容创建run_my_app.bat
for /l %i in (0,1,9999) do my_app %i
如果需要,您可以添加my_app的完整路径,例如:c:\dir1\dir2\my_app
而不是my_app
。您无需执行任何操作即可使其成为可执行文件 - 这是.bat
扩展名所暗示的。
然后按如下方式修改 C ++程序 :
#include <cstdlib>
int main(int argc, const char* argv[])
{
if (argc != 2)
{
std::cerr << "usage: " << argv[0] << " i\n"
"run the simulation iteration number <i>.\n";
exit(EXIT_FAILURE);
}
int i = std::atoi(argv[1]);
...simulation...
}