C ++程序在迭代过程中变慢

时间:2018-12-20 01:42:41

标签: c++ memory

我当时正在使用c ++程序构建分子并对其进行矢量运算。要获得某个特定问题的概率,我必须进行多次随机观察并计算比率。 当我获得1000个结果时,我的程序运行良好,但是当我获得10000个结果时,我的程序几乎永远卡住了(远超过10倍)。另外,计算机变得无响应。 因此,要找出问题所在,经过一些调试后,我得出以下结论: (我的矢量旋转算法) `

int main()
{
    Vector v1(3,4,0);
    geom3D::EulerAngle EA(90,0,0);
    int K=120000;
    for(int i=0;i<K;i++) 
    {
            v1=rotateVector(v1,EA);
            if(i%3000==0)
                cout << i << "\n";
    }
    cout << "Done\n";
}

本来应该打印3000,6000 ...,我希望可以定期打印,但是,我在这里也遇到了同样的问题: 在51000上,它打印速度非常快,然后计算机再次变得无响应。 我的猜测是关于内存分配的,它是在RotateVector()中分配了很多没有释放的内存,因此我尝试了在可能的地方添加delete语句。但是我仍然找不到一个好的解决方案。 这样的行为正常吗?有解决方案吗?另外,是否可以使用delete语句来释放内存?

1 个答案:

答案 0 :(得分:-1)

您发现计算机资源受到限制。这是正常的。就像计算机在正常使用情况下那样棒,它们的功能确实受到限制。因此,有时您必须找到一种创造性的方法来限制程序的数量,方法是限制迭代次数甚至数字的长度。有时,必须在用户输入和输入的位置进行此操作,从而限制了可能的输入。为了进一步说明,我有两个示例,这些示例使我自己的经验因高度重复而变慢。第一个示例:创建一个Excel文件,然后在单元格中输入随机数函数。水平复制单元格10000个单元格。然后将整个行向下复制10000行。按F9重新计算。第二个示例:创建一个Adobe Illustrator文件。用几个矢量创建一个矢量图形。复制并粘贴图形10000次。保存并关闭项目。重新打开项目。