我正在优化算法。我遇到了一个奇怪的怪事。
以下:
//The following is completely unused
vector<int>** rotated_squares;
rotated_squares = new vector<int>*[31];
for (int i=0;i<31;++i) {
rotated_squares[i] = new vector<int>[31];
}
{
//Lots of computation, using other vectors, but not rotated_squares
}
. . . 至少比以下速度慢十倍:
{
//The exact same computation as above.
}
我不知道是什么原因造成的。我唯一能想到的是,它以某种方式是底层实现的产物。为此,使用 Visual Studio 2010 for C++ 编译器。
编辑:澄清,下面的计算是变慢的部分。分析时,顶部的内存分配几乎可以忽略不计。
所以问题是我在顶部添加了行,代码运行速度慢了大约十倍。通过调试,额外的内存分配需要几分之一秒,但通常需要大约 8 秒的计算代码开始需要几分钟。
编辑:根据大众的需求,算法的来源可以在这里找到:http: //pastebin.com/Yf78gTNC。关键是#if 1 可以设置或取消设置,并且代码编译得很好——但是有了它,它在计算部分的运行速度要慢得多。
编辑:我已将代码简化为以下内容:http: //pastebin.com/mpnPsQE1。在我的代码中,这会导致问题。但是,制作一个简单的测试用例(即仅包含此代码的 main 函数)不会显示问题。