C++ 编译程序内存过大

编译C++的时候要求输入两个动态矩阵:
P[J][N][J][N][K]
Q[J][N][J][N]
其中J=1000;N=30;
程序中需要处理这两个动态矩阵间的运算,但是在调试的时候内存占用量过大,用windos的任务管理器查看,占用了1,221,5880k,导致程序运行不下去,请问有什么解决办法?

调用函数时,尽量用“引用传递”作为参数, 而不是直接把矩阵本身作为参数传进去,这样在内存中只有一个 P 和 Q的拷贝。
另外,看得出,这两个矩阵光存一份就已经很大了。如果连把它们读入到内存里都没办法的话,就最好考虑给自己的机器加内存条了。
不增加内存,那么降低存储空间的需求,就得增加时间复杂度。你可以把矩阵存储在多个硬盘文件里,这样每次读一部分到内存然后处理一些,存回去。最后再一点点拼出来最后结果。追问

请问有增加时间复杂度的存储例子么,这么看的话不是太明白怎么处理。存在多个硬盘文件里是什么意思?

追答

关于存储,可以参考外部排序 http://baike.baidu.com/link?url=iXQTU07CLMCGrKeZX9PiF0s5bTjYvnfEB2IGCr6dLVvr-yhPChTyGEENmuWYAds-1NE8T8QDkj03ezaLfZarKK

矩阵里很多计算是平行的。
比如乘法时,结果矩阵中的一项并不依赖于两个参与乘法的矩阵的每一项,而只是一行、一列。极端点来说,这样就可以每次只把一行一列读入内存,算出结果,存到硬盘上,再读入新的一行,一列。每一行,每一列都可以存成一个文件。(当然,这样太碎了,你可以考虑存更大的子矩阵)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-06
你的程序现在空间复杂度太大了,而且现在你需要在两个矩阵间进行运算,那么时间复杂度又很大,如果想要解决问题首先需要在算法上优化,比如采用分而治之的方式,如果真得从算法上优化不了,那么你就得确定你现在的主要矛盾在哪,时间还是空间,在二者之间找一个平衡点。
相似回答